From 27776a289622096b6e180b346a7d8bf213551d93 Mon Sep 17 00:00:00 2001 From: avashilling <165050625+avashilling@users.noreply.github.com> Date: Mon, 9 Feb 2026 10:32:50 -0500 Subject: [PATCH] 5582 grammar tweaks (#5594) * feat: add hint counter for grammar activities - fade out hint button to morph info in category questions - animated transitions for smoother hint display * chore: copy change and variable completion message * chore: only fetch necessary types in fetchErrors to end up with more grammar errors, but still only use one getUses call * translations --------- Co-authored-by: ggurdin --- lib/l10n/intl_ar.arb | 32 +- lib/l10n/intl_be.arb | 32 +- lib/l10n/intl_bn.arb | 32 +- lib/l10n/intl_bo.arb | 32 +- lib/l10n/intl_ca.arb | 32 +- lib/l10n/intl_cs.arb | 32 +- lib/l10n/intl_da.arb | 32 +- lib/l10n/intl_de.arb | 32 +- lib/l10n/intl_el.arb | 32 +- lib/l10n/intl_en.arb | 8 +- lib/l10n/intl_eo.arb | 32 +- lib/l10n/intl_es.arb | 32 +- lib/l10n/intl_et.arb | 32 +- lib/l10n/intl_eu.arb | 32 +- lib/l10n/intl_fa.arb | 32 +- lib/l10n/intl_fi.arb | 32 +- lib/l10n/intl_fil.arb | 32 +- lib/l10n/intl_fr.arb | 32 +- lib/l10n/intl_ga.arb | 32 +- lib/l10n/intl_gl.arb | 32 +- lib/l10n/intl_he.arb | 32 +- lib/l10n/intl_hi.arb | 32 +- lib/l10n/intl_hr.arb | 32 +- lib/l10n/intl_hu.arb | 32 +- lib/l10n/intl_ia.arb | 32 +- lib/l10n/intl_id.arb | 32 +- lib/l10n/intl_ie.arb | 32 +- lib/l10n/intl_it.arb | 32 +- lib/l10n/intl_ja.arb | 32 +- lib/l10n/intl_ka.arb | 32 +- lib/l10n/intl_ko.arb | 32 +- lib/l10n/intl_lt.arb | 32 +- lib/l10n/intl_lv.arb | 32 +- lib/l10n/intl_nb.arb | 32 +- lib/l10n/intl_nl.arb | 32 +- lib/l10n/intl_pl.arb | 32 +- lib/l10n/intl_pt.arb | 32 +- lib/l10n/intl_pt_BR.arb | 32 +- lib/l10n/intl_pt_PT.arb | 32 +- lib/l10n/intl_ro.arb | 32 +- lib/l10n/intl_ru.arb | 32 +- lib/l10n/intl_sk.arb | 32 +- lib/l10n/intl_sl.arb | 32 +- lib/l10n/intl_sr.arb | 32 +- lib/l10n/intl_sv.arb | 32 +- lib/l10n/intl_ta.arb | 32 +- lib/l10n/intl_te.arb | 32 +- lib/l10n/intl_th.arb | 32 +- lib/l10n/intl_tr.arb | 32 +- lib/l10n/intl_uk.arb | 32 +- lib/l10n/intl_vi.arb | 32 +- lib/l10n/intl_yue.arb | 32 +- lib/l10n/intl_zh.arb | 32 +- lib/l10n/intl_zh_Hant.arb | 32 +- .../analytics_data_service.dart | 4 +- .../analytics_data/analytics_database.dart | 4 +- .../analytics_practice_page.dart | 41 ++- .../analytics_practice_session_repo.dart | 13 +- .../analytics_practice_view.dart | 332 ++++++++++-------- .../completed_activity_session_view.dart | 4 +- 60 files changed, 1360 insertions(+), 742 deletions(-) diff --git a/lib/l10n/intl_ar.arb b/lib/l10n/intl_ar.arb index cebe2097f..cb7e976f9 100644 --- a/lib/l10n/intl_ar.arb +++ b/lib/l10n/intl_ar.arb @@ -1,6 +1,6 @@ { "@@locale": "ar", - "@@last_modified": "2026-02-05 10:09:56.397837", + "@@last_modified": "2026-02-09 10:31:06.969392", "about": "حول", "@about": { "type": "String", @@ -10954,8 +10954,6 @@ "congratulations": "مبروك!", "anotherRound": "جولة أخرى", "noActivityRequest": "لا يوجد طلب نشاط حالي.", - "quit": "خروج", - "congratulationsYouveCompletedPractice": "تهانينا! لقد أكملت جلسة التدريب.", "mustHave10Words": "يجب أن يكون لديك على الأقل 10 كلمات مفردات لممارستها. حاول التحدث إلى صديق أو بوت بانجيا لاكتشاف المزيد!", "botSettings": "إعدادات البوت", "activitySettingsOverrideWarning": "اللغة ومستوى اللغة محددان بواسطة خطة النشاط", @@ -11004,14 +11002,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11201,5 +11191,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "ممارسة مثالية!", + "greatPractice": "ممارسة رائعة!", + "usedNoHints": "عمل رائع بعدم استخدام أي تلميحات!", + "youveCompletedPractice": "لقد أكملت الممارسة، استمر في ذلك لتحسين مهاراتك!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index 72fb9a8ca..9f56ebca9 100644 --- a/lib/l10n/intl_be.arb +++ b/lib/l10n/intl_be.arb @@ -1908,7 +1908,7 @@ "playWithAI": "Пакуль гуляйце з ШІ", "courseStartDesc": "Pangea Bot гатовы да працы ў любы час!\n\n...але навучанне лепш з сябрамі!", "@@locale": "be", - "@@last_modified": "2026-02-05 10:09:46.469770", + "@@last_modified": "2026-02-09 10:30:56.849128", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11836,8 +11836,6 @@ "congratulations": "Сардэчна віншуем!", "anotherRound": "Яшчэ адзін раунд", "noActivityRequest": "Няма бягучага запыту на актыўнасць.", - "quit": "Выйсці", - "congratulationsYouveCompletedPractice": "Сардэчна віншуем! Вы завяршылі сесію практыкі.", "mustHave10Words": "Вы павінны мець не менш за 10 слоў для практыкавання. Паспрабуйце пагаварыць з сябрам або Pangea Bot, каб даведацца больш!", "botSettings": "Налады бота", "activitySettingsOverrideWarning": "Мова і ўзровень мовы вызначаюцца планам актыўнасці", @@ -11886,14 +11884,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12083,5 +12073,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Ідэальная практыка!", + "greatPractice": "Выдатная практыка!", + "usedNoHints": "Малайчына, што не карыстаўся падказкамі!", + "youveCompletedPractice": "Вы завяршылі практыку, працягвайце, каб стаць лепшым!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bn.arb b/lib/l10n/intl_bn.arb index ce0510c60..fb33c73ee 100644 --- a/lib/l10n/intl_bn.arb +++ b/lib/l10n/intl_bn.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:10:08.830801", + "@@last_modified": "2026-02-09 10:31:21.327976", "about": "সম্পর্কে", "@about": { "type": "String", @@ -11841,8 +11841,6 @@ "congratulations": "অভিনন্দন!", "anotherRound": "আরেকটি রাউন্ড", "noActivityRequest": "বর্তমান কোন কার্যকলাপের অনুরোধ নেই।", - "quit": "বিরতি", - "congratulationsYouveCompletedPractice": "অভিনন্দন! আপনি অনুশীলন সেশন সম্পন্ন করেছেন।", "mustHave10Words": "আপনার অনুশীলনের জন্য অন্তত 10টি শব্দ থাকতে হবে। আরও জানার জন্য একটি বন্ধুর সাথে কথা বলুন বা Pangea Bot এর সাথে কথা বলুন!", "botSettings": "বট সেটিংস", "activitySettingsOverrideWarning": "কার্যকলাপ পরিকল্পনার দ্বারা নির্ধারিত ভাষা এবং ভাষার স্তর", @@ -11891,14 +11889,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12088,5 +12078,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "পারফেক্ট প্র্যাকটিস!", + "greatPractice": "দারুণ প্র্যাকটিস!", + "usedNoHints": "কোনো হিন্ট ব্যবহার না করার জন্য ভালো কাজ!", + "youveCompletedPractice": "আপনি প্র্যাকটিস সম্পন্ন করেছেন, উন্নতির জন্য এভাবে চালিয়ে যান!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bo.arb b/lib/l10n/intl_bo.arb index 7cf7f1681..c43b02482 100644 --- a/lib/l10n/intl_bo.arb +++ b/lib/l10n/intl_bo.arb @@ -4276,7 +4276,7 @@ "joinPublicTrip": "མི་ཚེས་ལ་ལོག་འབད།", "startOwnTrip": "ངེད་རང་གི་ལོག་ལ་སྦྱོར་བཅོས།", "@@locale": "bo", - "@@last_modified": "2026-02-05 10:10:06.262776", + "@@last_modified": "2026-02-09 10:31:18.713273", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -10491,8 +10491,6 @@ "congratulations": "Čestitamo!", "anotherRound": "Još jedan krug", "noActivityRequest": "Ninguna solicitud de actividad actual.", - "quit": "Salir", - "congratulationsYouveCompletedPractice": "¡Felicidades! Has completado la sesión de práctica.", "mustHave10Words": "Debes tener al menos 10 palabras de vocabulario para practicarlas. ¡Intenta hablar con un amigo o con Pangea Bot para descubrir más!", "botSettings": "Configuraciones del Bot", "activitySettingsOverrideWarning": "Idioma y nivel de idioma determinados por el plan de actividad", @@ -10541,14 +10539,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10738,5 +10728,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Perfekta praktik!", + "greatPractice": "Stora praktik!", + "usedNoHints": "Bra jobbat utan att använda några ledtrådar!", + "youveCompletedPractice": "Du har slutfört praktiken, fortsätt så för att bli bättre!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb index e2777e39a..6567634fd 100644 --- a/lib/l10n/intl_ca.arb +++ b/lib/l10n/intl_ca.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:09:47.712187", + "@@last_modified": "2026-02-09 10:30:58.877498", "about": "Quant a", "@about": { "type": "String", @@ -10761,8 +10761,6 @@ "congratulations": "Felicitats!", "anotherRound": "Una altra ronda", "noActivityRequest": "No hi ha cap sol·licitud d'activitat actual.", - "quit": "Sortir", - "congratulationsYouveCompletedPractice": "Felicitats! Has completat la sessió de pràctica.", "mustHave10Words": "Has de tenir almenys 10 paraules de vocabulari per practicar-les. Prova a parlar amb un amic o amb el Pangea Bot per descobrir-ne més!", "botSettings": "Configuració del Bot", "activitySettingsOverrideWarning": "Idioma i nivell d'idioma determinats pel pla d'activitat", @@ -10811,14 +10809,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11008,5 +10998,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Pràctica perfecta!", + "greatPractice": "Gran pràctica!", + "usedNoHints": "Bon treball sense utilitzar cap pista!", + "youveCompletedPractice": "Has completat la pràctica, continua així per millorar!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index 9e1758776..2f0de87e6 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -1,6 +1,6 @@ { "@@locale": "cs", - "@@last_modified": "2026-02-05 10:09:43.831148", + "@@last_modified": "2026-02-09 10:30:53.085602", "about": "O aplikaci", "@about": { "type": "String", @@ -11344,8 +11344,6 @@ "congratulations": "Gratulujeme!", "anotherRound": "Další kolo", "noActivityRequest": "Žádná aktuální žádost o aktivitu.", - "quit": "Ukončit", - "congratulationsYouveCompletedPractice": "Gratulujeme! Dokončili jste cvičební sezení.", "mustHave10Words": "Musíte mít alespoň 10 slovní zásoby, abyste je mohli procvičovat. Zkuste si promluvit s přítelem nebo Pangea Botem, abyste objevili více!", "botSettings": "Nastavení bota", "activitySettingsOverrideWarning": "Jazyk a jazyková úroveň určené plánem aktivity", @@ -11394,14 +11392,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11591,5 +11581,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Dokonalá praxe!", + "greatPractice": "Skvělá praxe!", + "usedNoHints": "Dobrá práce, že jsi nepoužil žádné nápovědy!", + "youveCompletedPractice": "Dokončil jsi praxi, pokračuj v tom, abys se zlepšil!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_da.arb b/lib/l10n/intl_da.arb index eef287d6f..cb13a9d91 100644 --- a/lib/l10n/intl_da.arb +++ b/lib/l10n/intl_da.arb @@ -1927,7 +1927,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": "2026-02-05 10:09:17.541713", + "@@last_modified": "2026-02-09 10:30:26.547080", "@aboutHomeserver": { "type": "String", "placeholders": { @@ -11798,8 +11798,6 @@ "congratulations": "Tillykke!", "anotherRound": "En runde mere", "noActivityRequest": "Ingen aktuelle aktivitetsanmodning.", - "quit": "Afslut", - "congratulationsYouveCompletedPractice": "Tillykke! Du har gennemført øvelsessessionen.", "mustHave10Words": "Du skal have mindst 10 ordforrådsord for at øve dem. Prøv at tale med en ven eller Pangea Bot for at opdage mere!", "botSettings": "Botindstillinger", "activitySettingsOverrideWarning": "Sprog og sprogniveau bestemt af aktivitetsplan", @@ -11848,14 +11846,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12045,5 +12035,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Perfekt praksis!", + "greatPractice": "God praksis!", + "usedNoHints": "Godt klaret uden at bruge nogen hints!", + "youveCompletedPractice": "Du har gennemført praksis, bliv ved med det for at blive bedre!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 9c51df9e8..c85543eca 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -1,6 +1,6 @@ { "@@locale": "de", - "@@last_modified": "2026-02-05 10:09:37.665075", + "@@last_modified": "2026-02-09 10:30:45.424459", "alwaysUse24HourFormat": "true", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." @@ -10744,8 +10744,6 @@ "congratulations": "Herzlichen Glückwunsch!", "anotherRound": "Eine weitere Runde", "noActivityRequest": "Keine aktuellen Aktivitätsanfragen.", - "quit": "Beenden", - "congratulationsYouveCompletedPractice": "Herzlichen Glückwunsch! Sie haben die Übungssitzung abgeschlossen.", "mustHave10Words": "Sie müssen mindestens 10 Vokabeln haben, um sie zu üben. Versuchen Sie, mit einem Freund oder dem Pangea Bot zu sprechen, um mehr zu entdecken!", "botSettings": "Bot-Einstellungen", "activitySettingsOverrideWarning": "Sprache und Sprachniveau werden durch den Aktivitätsplan bestimmt", @@ -10794,14 +10792,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10991,5 +10981,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Perfekte Übung!", + "greatPractice": "Großartige Übung!", + "usedNoHints": "Gut gemacht, keine Hinweise zu verwenden!", + "youveCompletedPractice": "Du hast die Übung abgeschlossen, mach weiter so, um besser zu werden!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_el.arb b/lib/l10n/intl_el.arb index d2aecfddb..41cbb375a 100644 --- a/lib/l10n/intl_el.arb +++ b/lib/l10n/intl_el.arb @@ -4453,7 +4453,7 @@ "playWithAI": "Παίξτε με την Τεχνητή Νοημοσύνη προς το παρόν", "courseStartDesc": "Ο Pangea Bot είναι έτοιμος να ξεκινήσει οποιαδήποτε στιγμή!\n\n...αλλά η μάθηση είναι καλύτερη με φίλους!", "@@locale": "el", - "@@last_modified": "2026-02-05 10:10:14.390437", + "@@last_modified": "2026-02-09 10:31:27.836094", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11795,8 +11795,6 @@ "congratulations": "Συγχαρητήρια!", "anotherRound": "Μια ακόμη γύρος", "noActivityRequest": "Δεν υπάρχει τρέχουσα αίτηση δραστηριότητας.", - "quit": "Έξοδος", - "congratulationsYouveCompletedPractice": "Συγχαρητήρια! Έχετε ολοκληρώσει την πρακτική συνεδρία.", "mustHave10Words": "Πρέπει να έχετε τουλάχιστον 10 λέξεις λεξιλογίου για να τις εξασκήσετε. Δοκιμάστε να μιλήσετε με έναν φίλο ή με τον Pangea Bot για να ανακαλύψετε περισσότερα!", "botSettings": "Ρυθμίσεις Bot", "activitySettingsOverrideWarning": "Η γλώσσα και το επίπεδο γλώσσας καθορίζονται από το σχέδιο δραστηριότητας", @@ -11845,14 +11843,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12042,5 +12032,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Τέλεια πρακτική!", + "greatPractice": "Υπέροχη πρακτική!", + "usedNoHints": "Καλή δουλειά που δεν χρησιμοποίησες καθόλου υποδείξεις!", + "youveCompletedPractice": "Έχεις ολοκληρώσει την πρακτική, συνέχισε έτσι για να γίνεις καλύτερος!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index a47f1a03e..f062e5a51 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -5027,8 +5027,6 @@ "genericWebRecordingError": "Something went wrong. We recommend using the Chrome browser when recording messages.", "screenSizeWarning": "For the best experience using this application, please expand your screen size.", "noActivityRequest": "No current activity request.", - "quit": "Quit", - "congratulationsYouveCompletedPractice": "Congratulations! You've completed the practice session.", "activitiesToUnlockTopicTitle": "Activities to Unlock Next Topic", "activitiesToUnlockTopicDesc": "Set the number of activities to unlock the next course topic", "mustHave10Words": "You must have at least 10 vocab words to practice them. Try talking to a friend or Pangea Bot to discover more!", @@ -5073,5 +5071,9 @@ "supportSubtitle": "Questions? We're here to help!", "autoIGCToolName": "Enable writing assistance", "autoIGCToolDescription": "Automatically run Pangea Chat tools to correct sent messages to target language.", - "emptyAudioError": "Recording failed. Please check your audio permissions and try again." + "emptyAudioError": "Recording failed. Please check your audio permissions and try again.", + "perfectPractice": "Perfect practice!", + "greatPractice": "Great practice!", + "usedNoHints": "Nice job not using any hints!", + "youveCompletedPractice": "You've completed practice, keep it up to get better!" } diff --git a/lib/l10n/intl_eo.arb b/lib/l10n/intl_eo.arb index 2c6c6ed93..1f4a4fc1d 100644 --- a/lib/l10n/intl_eo.arb +++ b/lib/l10n/intl_eo.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:10:17.896498", + "@@last_modified": "2026-02-09 10:31:32.343732", "about": "Prio", "@about": { "type": "String", @@ -11826,8 +11826,6 @@ "congratulations": "Gratulon!", "anotherRound": "Alia rundo", "noActivityRequest": "Neniu aktuala aktivitecpeticio.", - "quit": "Eliri", - "congratulationsYouveCompletedPractice": "Gratulojn! Vi kompletigis la praktikadon.", "mustHave10Words": "Vi devas havi almenaŭ 10 vortojn por praktiki ilin. Provu paroli kun amiko aŭ Pangea Bot por malkovri pli!", "botSettings": "Botaj Agordoj", "activitySettingsOverrideWarning": "Lingvo kaj lingvonivelo determinita de la aktiviteca plano", @@ -11876,14 +11874,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12073,5 +12063,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Perfekta praktiko!", + "greatPractice": "Granda praktiko!", + "usedNoHints": "Bonega laboro ne uzi iujn sugestojn!", + "youveCompletedPractice": "Vi finis la praktikon, daŭrigu por pliboniĝi!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 8458be45b..aa2560f1b 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -1,6 +1,6 @@ { "@@locale": "es", - "@@last_modified": "2026-02-05 10:09:12.250951", + "@@last_modified": "2026-02-09 10:30:21.560804", "about": "Acerca de", "@about": { "type": "String", @@ -7979,8 +7979,6 @@ "congratulations": "¡Felicidades!", "anotherRound": "Otra ronda", "noActivityRequest": "No hay solicitudes de actividad actuales.", - "quit": "Salir", - "congratulationsYouveCompletedPractice": "¡Felicidades! Has completado la sesión de práctica.", "mustHave10Words": "Debes tener al menos 10 palabras de vocabulario para practicarlas. ¡Intenta hablar con un amigo o con Pangea Bot para descubrir más!", "botSettings": "Configuración del Bot", "activitySettingsOverrideWarning": "Idioma y nivel de idioma determinados por el plan de actividad", @@ -8029,14 +8027,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -8226,5 +8216,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "¡Práctica perfecta!", + "greatPractice": "¡Gran práctica!", + "usedNoHints": "¡Buen trabajo no usando ninguna pista!", + "youveCompletedPractice": "¡Has completado la práctica, sigue así para mejorar!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb index ddb897208..b331e9a9f 100644 --- a/lib/l10n/intl_et.arb +++ b/lib/l10n/intl_et.arb @@ -1,6 +1,6 @@ { "@@locale": "et", - "@@last_modified": "2026-02-05 10:09:36.127342", + "@@last_modified": "2026-02-09 10:30:44.206560", "about": "Rakenduse teave", "@about": { "type": "String", @@ -11008,8 +11008,6 @@ "congratulations": "Palju õnne!", "anotherRound": "Veel üks voor", "noActivityRequest": "Praegu ei ole aktiivsuse taotlust.", - "quit": "Välju", - "congratulationsYouveCompletedPractice": "Palju õnne! Olete lõpetanud harjut seansi.", "mustHave10Words": "Te peate omama vähemalt 10 sõnavara sõna, et neid harjutada. Proovige rääkida sõbraga või Pangea Botiga, et rohkem avastada!", "botSettings": "Boti seaded", "activitySettingsOverrideWarning": "Keele ja keele taseme määrab tegevusplaan", @@ -11058,14 +11056,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11255,5 +11245,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Täiuslik harjutamine!", + "greatPractice": "Suurepärane harjutamine!", + "usedNoHints": "Hea töö, et ei kasutanud mingeid vihjeid!", + "youveCompletedPractice": "Oled harjutamise lõpetanud, jätka samas vaimus, et paremaks saada!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_eu.arb b/lib/l10n/intl_eu.arb index 9bab7424f..6cde5e0a0 100644 --- a/lib/l10n/intl_eu.arb +++ b/lib/l10n/intl_eu.arb @@ -1,6 +1,6 @@ { "@@locale": "eu", - "@@last_modified": "2026-02-05 10:09:33.401642", + "@@last_modified": "2026-02-09 10:30:41.236742", "about": "Honi buruz", "@about": { "type": "String", @@ -10737,8 +10737,6 @@ "congratulations": "Zorionak!", "anotherRound": "Beste txanda bat", "noActivityRequest": "Ez dago egungo jarduera eskaerarik.", - "quit": "Irten", - "congratulationsYouveCompletedPractice": "Zorionak! Praktika saioa amaitu duzu.", "mustHave10Words": "Gutxienez 10 hiztegi hitz izan behar dituzu praktikan jartzeko. Saiatu lagun batekin edo Pangea Bot-ekin hitz egiten gehiago ezagutzeko!", "botSettings": "Botaren Ezarpenak", "activitySettingsOverrideWarning": "Jarduera planak zehaztutako hizkuntza eta hizkuntza maila", @@ -10787,14 +10785,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10984,5 +10974,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Praktika perfektua!", + "greatPractice": "Praktika handia!", + "usedNoHints": "Lan ona, ez duzu inolako iradokizunik erabili!", + "youveCompletedPractice": "Praktika amaitu duzu, jarraitu horrela hobetzeko!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fa.arb b/lib/l10n/intl_fa.arb index 45ee57de3..be63f02dd 100644 --- a/lib/l10n/intl_fa.arb +++ b/lib/l10n/intl_fa.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:10:10.668033", + "@@last_modified": "2026-02-09 10:31:23.313797", "repeatPassword": "تکرار رمزعبور", "@repeatPassword": {}, "about": "درباره", @@ -11469,8 +11469,6 @@ "congratulations": "تبریک می‌گویم!", "anotherRound": "یک دور دیگر", "noActivityRequest": "درخواست فعالیت فعلی وجود ندارد.", - "quit": "خروج", - "congratulationsYouveCompletedPractice": "تبریک! شما جلسه تمرین را کامل کرده‌اید.", "mustHave10Words": "شما باید حداقل 10 کلمه واژگان برای تمرین داشته باشید. سعی کنید با یک دوست یا ربات پانژیا صحبت کنید تا بیشتر کشف کنید!", "botSettings": "تنظیمات ربات", "activitySettingsOverrideWarning": "زبان و سطح زبان تعیین شده توسط برنامه فعالیت", @@ -11519,14 +11517,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11716,5 +11706,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "تمرین عالی!", + "greatPractice": "تمرین فوق‌العاده!", + "usedNoHints": "کار خوبی کردید که از هیچ راهنمایی استفاده نکردید!", + "youveCompletedPractice": "شما تمرین را کامل کردید، ادامه دهید تا بهتر شوید!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fi.arb b/lib/l10n/intl_fi.arb index 475407fe6..c65b2dc8f 100644 --- a/lib/l10n/intl_fi.arb +++ b/lib/l10n/intl_fi.arb @@ -4006,7 +4006,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": "2026-02-05 10:09:16.239112", + "@@last_modified": "2026-02-09 10:30:24.862038", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11360,8 +11360,6 @@ "congratulations": "Onnittelut!", "anotherRound": "Toinen kierros", "noActivityRequest": "Ei nykyistä aktiviteettipyyntöä.", - "quit": "Poistu", - "congratulationsYouveCompletedPractice": "Onnittelut! Olet suorittanut harjoitussession.", "mustHave10Words": "Sinulla on oltava vähintään 10 sanastoa harjoiteltavaksi. Yritä puhua ystävän tai Pangea Botin kanssa löytääksesi lisää!", "botSettings": "Bottiasetukset", "activitySettingsOverrideWarning": "Kieli ja kielitaso määräytyvät aktiviteettisuunnitelman mukaan", @@ -11410,14 +11408,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11607,5 +11597,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Täydellinen harjoittelu!", + "greatPractice": "Loistava harjoittelu!", + "usedNoHints": "Hyvä työ, ettet käyttänyt mitään vihjeitä!", + "youveCompletedPractice": "Olet suorittanut harjoituksen, jatka samaan malliin parantuaksesi!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fil.arb b/lib/l10n/intl_fil.arb index d1c809870..6b8fc6e95 100644 --- a/lib/l10n/intl_fil.arb +++ b/lib/l10n/intl_fil.arb @@ -2784,7 +2784,7 @@ "selectAll": "Piliin lahat", "deselectAll": "Huwag piliin lahat", "@@locale": "fil", - "@@last_modified": "2026-02-05 10:09:53.428313", + "@@last_modified": "2026-02-09 10:31:04.579384", "@setCustomPermissionLevel": { "type": "String", "placeholders": {} @@ -11713,8 +11713,6 @@ "congratulations": "Binabati kita!", "anotherRound": "Isa pang round", "noActivityRequest": "Walang kasalukuyang kahilingan sa aktibidad.", - "quit": "Lumabas", - "congratulationsYouveCompletedPractice": "Binabati kita! Natapos mo na ang sesyon ng pagsasanay.", "mustHave10Words": "Dapat mayroon kang hindi bababa sa 10 salita ng bokabularyo upang sanayin ang mga ito. Subukan mong makipag-usap sa isang kaibigan o sa Pangea Bot upang matuklasan pa!", "botSettings": "Mga Setting ng Bot", "activitySettingsOverrideWarning": "Wika at antas ng wika na tinutukoy ng plano ng aktibidad", @@ -11763,14 +11761,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11960,5 +11950,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Perpektong pagsasanay!", + "greatPractice": "Mahusay na pagsasanay!", + "usedNoHints": "Magandang trabaho sa hindi paggamit ng anumang mga pahiwatig!", + "youveCompletedPractice": "Natapos mo na ang pagsasanay, ipagpatuloy mo lang ito upang maging mas mahusay!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 30464e9eb..7a95f7509 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -1,6 +1,6 @@ { "@@locale": "fr", - "@@last_modified": "2026-02-05 10:10:24.987990", + "@@last_modified": "2026-02-09 10:31:39.092623", "about": "À propos", "@about": { "type": "String", @@ -11061,8 +11061,6 @@ "congratulations": "Félicitations !", "anotherRound": "Un autre tour", "noActivityRequest": "Aucune demande d'activité en cours.", - "quit": "Quitter", - "congratulationsYouveCompletedPractice": "Félicitations ! Vous avez terminé la session de pratique.", "mustHave10Words": "Vous devez avoir au moins 10 mots de vocabulaire à pratiquer. Essayez de parler à un ami ou au Pangea Bot pour en découvrir plus !", "botSettings": "Paramètres du bot", "activitySettingsOverrideWarning": "Langue et niveau de langue déterminés par le plan d'activité", @@ -11111,14 +11109,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11308,5 +11298,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Pratique parfaite !", + "greatPractice": "Super pratique !", + "usedNoHints": "Bien joué de ne pas avoir utilisé d'indices !", + "youveCompletedPractice": "Vous avez terminé la pratique, continuez comme ça pour vous améliorer !", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index ac8fb9bf9..dbc6a0884 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -4514,7 +4514,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": "2026-02-05 10:10:23.901035", + "@@last_modified": "2026-02-09 10:31:37.968813", "@customReaction": { "type": "String", "placeholders": {} @@ -10735,8 +10735,6 @@ "congratulations": "Comhghairdeas!", "anotherRound": "Ciorcal eile", "noActivityRequest": "Níl aon iarratas gníomhaíochta reatha.", - "quit": "Dícheangail", - "congratulationsYouveCompletedPractice": "Comhghairdeas! Tá an seisiún cleachtaidh críochnaithe agat.", "mustHave10Words": "Caithfidh go mbeidh 10 focal le haghaidh cleachtaidh agat ar a laghad. Bain triail as labhairt le cara nó le Pangea Bot chun tuilleadh a fháil amach!", "botSettings": "Socruithe an Bhot", "activitySettingsOverrideWarning": "Teanga agus leibhéal teanga a chinneadh de réir plean gníomhaíochta", @@ -10785,14 +10783,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10982,5 +10972,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Cleachtadh foirfe!", + "greatPractice": "Cleachtadh iontach!", + "usedNoHints": "Obair mhaith gan aon leideanna a úsáid!", + "youveCompletedPractice": "Tá do chleachtadh críochnaithe, coinnigh ort chun feabhsú!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index 44263a6c5..91c508254 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -1,6 +1,6 @@ { "@@locale": "gl", - "@@last_modified": "2026-02-05 10:09:14.434046", + "@@last_modified": "2026-02-09 10:30:23.363980", "about": "Acerca de", "@about": { "type": "String", @@ -10734,8 +10734,6 @@ "congratulations": "Parabéns!", "anotherRound": "Outra ronda", "noActivityRequest": "Non hai solicitudes de actividade actuais.", - "quit": "Saír", - "congratulationsYouveCompletedPractice": "Parabéns! Completaches a sesión de práctica.", "mustHave10Words": "Debes ter polo menos 10 palabras de vocabulario para practicálas. Intenta falar cun amigo ou co Pangea Bot para descubrir máis!", "botSettings": "Configuración do Bot", "activitySettingsOverrideWarning": "Idioma e nivel de idioma determinados polo plan de actividade", @@ -10784,14 +10782,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10981,5 +10971,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Práctica perfecta!", + "greatPractice": "Gran práctica!", + "usedNoHints": "Bo traballo sen usar pistas!", + "youveCompletedPractice": "Completaches a práctica, segue así para mellorar!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_he.arb b/lib/l10n/intl_he.arb index 63f1dae8f..344403974 100644 --- a/lib/l10n/intl_he.arb +++ b/lib/l10n/intl_he.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:09:28.796405", + "@@last_modified": "2026-02-09 10:30:36.836306", "about": "אודות", "@about": { "type": "String", @@ -11786,8 +11786,6 @@ "congratulations": "מזל טוב!", "anotherRound": "סיבוב נוסף", "noActivityRequest": "אין בקשת פעילות נוכחית.", - "quit": "צא", - "congratulationsYouveCompletedPractice": "מזל טוב! סיימת את מושב האימון.", "mustHave10Words": "עליך שיהיו לפחות 10 מילים לאוצר מילים כדי לתרגל אותן. נסה לדבר עם חבר או עם פנגיאה בוט כדי לגלות עוד!", "botSettings": "הגדרות בוט", "activitySettingsOverrideWarning": "שפה ורמת שפה נקבעות על ידי תוכנית הפעילות", @@ -11836,14 +11834,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12033,5 +12023,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "תרגול מושלם!", + "greatPractice": "תרגול נהדר!", + "usedNoHints": "עבודה טובה שלא השתמשת ברמזים!", + "youveCompletedPractice": "סיימת את התרגול, המשך כך כדי להשתפר!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hi.arb b/lib/l10n/intl_hi.arb index d7758c041..61a8e2885 100644 --- a/lib/l10n/intl_hi.arb +++ b/lib/l10n/intl_hi.arb @@ -4480,7 +4480,7 @@ "playWithAI": "अभी के लिए एआई के साथ खेलें", "courseStartDesc": "पैंजिया बॉट कभी भी जाने के लिए तैयार है!\n\n...लेकिन दोस्तों के साथ सीखना बेहतर है!", "@@locale": "hi", - "@@last_modified": "2026-02-05 10:10:16.696075", + "@@last_modified": "2026-02-09 10:31:30.698303", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11822,8 +11822,6 @@ "congratulations": "बधाई हो!", "anotherRound": "एक और राउंड", "noActivityRequest": "कोई वर्तमान गतिविधि अनुरोध नहीं है।", - "quit": "बंद करें", - "congratulationsYouveCompletedPractice": "बधाई हो! आपने अभ्यास सत्र पूरा कर लिया है।", "mustHave10Words": "आपके पास उन्हें अभ्यास करने के लिए कम से कम 10 शब्द होने चाहिए। अधिक जानने के लिए किसी मित्र या Pangea Bot से बात करने की कोशिश करें!", "botSettings": "बॉट सेटिंग्स", "activitySettingsOverrideWarning": "भाषा और भाषा स्तर गतिविधि योजना द्वारा निर्धारित किया गया है", @@ -11872,14 +11870,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12069,5 +12059,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "संपूर्ण अभ्यास!", + "greatPractice": "महान अभ्यास!", + "usedNoHints": "कोई संकेत न उपयोग करने के लिए अच्छा काम!", + "youveCompletedPractice": "आपने अभ्यास पूरा कर लिया है, बेहतर होने के लिए इसे जारी रखें!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hr.arb b/lib/l10n/intl_hr.arb index fa3e6d919..d827d59b3 100644 --- a/lib/l10n/intl_hr.arb +++ b/lib/l10n/intl_hr.arb @@ -1,6 +1,6 @@ { "@@locale": "hr", - "@@last_modified": "2026-02-05 10:09:27.459987", + "@@last_modified": "2026-02-09 10:30:35.547762", "about": "Informacije", "@about": { "type": "String", @@ -11109,8 +11109,6 @@ "congratulations": "Čestitamo!", "anotherRound": "Još jedan krug", "noActivityRequest": "Nema trenutnog zahtjeva za aktivnost.", - "quit": "Izlaz", - "congratulationsYouveCompletedPractice": "Čestitamo! Završili ste sesiju vježbanja.", "mustHave10Words": "Morate imati najmanje 10 riječi za vokabular kako biste ih vježbali. Pokušajte razgovarati s prijateljem ili Pangea Botom kako biste otkrili više!", "botSettings": "Postavke Bota", "activitySettingsOverrideWarning": "Jezik i razina jezika određeni planom aktivnosti", @@ -11159,14 +11157,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11356,5 +11346,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Savršena praksa!", + "greatPractice": "Sjajna praksa!", + "usedNoHints": "Odlično, niste koristili nikakve savjete!", + "youveCompletedPractice": "Završili ste praksu, nastavite tako da postanete bolji!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb index 7cdb4f9a1..ae2ab1174 100644 --- a/lib/l10n/intl_hu.arb +++ b/lib/l10n/intl_hu.arb @@ -1,6 +1,6 @@ { "@@locale": "hu", - "@@last_modified": "2026-02-05 10:09:19.675804", + "@@last_modified": "2026-02-09 10:30:28.032874", "about": "Névjegy", "@about": { "type": "String", @@ -10738,8 +10738,6 @@ "congratulations": "Gratulálunk!", "anotherRound": "Még egy kör", "noActivityRequest": "Jelenleg nincs aktivitás kérés.", - "quit": "Kilépés", - "congratulationsYouveCompletedPractice": "Gratulálunk! Befejezted a gyakorló ülést.", "mustHave10Words": "Legalább 10 szókincsszót kellene gyakorolnod. Próbálj meg beszélni egy baráttal vagy a Pangea Bot-tal, hogy többet felfedezhess!", "botSettings": "Bot beállítások", "activitySettingsOverrideWarning": "A nyelvet és a nyelvi szintet az aktivitási terv határozza meg", @@ -10788,14 +10786,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10985,5 +10975,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Tökéletes gyakorlás!", + "greatPractice": "Nagyszerű gyakorlás!", + "usedNoHints": "Jó munka, hogy nem használtál semmilyen tippet!", + "youveCompletedPractice": "Befejezted a gyakorlást, folytasd így, hogy jobb legyél!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ia.arb b/lib/l10n/intl_ia.arb index 3321a7c8a..1b5f6a205 100644 --- a/lib/l10n/intl_ia.arb +++ b/lib/l10n/intl_ia.arb @@ -1955,7 +1955,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": "2026-02-05 10:09:29.962506", + "@@last_modified": "2026-02-09 10:30:38.575679", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11815,8 +11815,6 @@ "congratulations": "Gratulon!", "anotherRound": "Alia rundo", "noActivityRequest": "Ninguna solicitud de actividad actual.", - "quit": "Salir", - "congratulationsYouveCompletedPractice": "¡Felicidades! Has completado la sesión de práctica.", "mustHave10Words": "Debes tener al menos 10 palabras de vocabulario para practicarlas. ¡Intenta hablar con un amigo o con Pangea Bot para descubrir más!", "botSettings": "Configuraciones del Bot", "activitySettingsOverrideWarning": "Idioma y nivel de idioma determinados por el plan de actividad", @@ -11865,14 +11863,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12062,5 +12052,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Praktiko perfekta!", + "greatPractice": "Praktiko granda!", + "usedNoHints": "Bonega laboro ne uzante iujn indikojn!", + "youveCompletedPractice": "Vi finis la praktikon, daŭrigu por pliboniĝi!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_id.arb b/lib/l10n/intl_id.arb index cb48fe670..e773a3d57 100644 --- a/lib/l10n/intl_id.arb +++ b/lib/l10n/intl_id.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:09:21.065759", + "@@last_modified": "2026-02-09 10:30:29.458472", "setAsCanonicalAlias": "Atur sebagai alias utama", "@setAsCanonicalAlias": { "type": "String", @@ -10728,8 +10728,6 @@ "congratulations": "Selamat!", "anotherRound": "Putaran lain", "noActivityRequest": "Tidak ada permintaan aktivitas saat ini.", - "quit": "Keluar", - "congratulationsYouveCompletedPractice": "Selamat! Anda telah menyelesaikan sesi latihan.", "mustHave10Words": "Anda harus memiliki setidaknya 10 kata kosakata untuk berlatih. Cobalah berbicara dengan teman atau Pangea Bot untuk menemukan lebih banyak!", "botSettings": "Pengaturan Bot", "activitySettingsOverrideWarning": "Bahasa dan tingkat bahasa ditentukan oleh rencana aktivitas", @@ -10778,14 +10776,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10975,5 +10965,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Latihan yang sempurna!", + "greatPractice": "Latihan yang hebat!", + "usedNoHints": "Kerja bagus tidak menggunakan petunjuk!", + "youveCompletedPractice": "Anda telah menyelesaikan latihan, teruskan untuk menjadi lebih baik!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ie.arb b/lib/l10n/intl_ie.arb index d473493ff..1ea252757 100644 --- a/lib/l10n/intl_ie.arb +++ b/lib/l10n/intl_ie.arb @@ -4369,7 +4369,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": "2026-02-05 10:09:26.195275", + "@@last_modified": "2026-02-09 10:30:34.375227", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11711,8 +11711,6 @@ "congratulations": "Gratulon!", "anotherRound": "Alia rundo", "noActivityRequest": "Ninguna solicitud de actividad actual.", - "quit": "Salir", - "congratulationsYouveCompletedPractice": "¡Felicidades! Has completado la sesión de práctica.", "mustHave10Words": "Debes tener al menos 10 palabras de vocabulario para practicarlas. ¡Intenta hablar con un amigo o con Pangea Bot para descubrir más!", "botSettings": "Configuración del Bot", "activitySettingsOverrideWarning": "Idioma y nivel de idioma determinados por el plan de actividad", @@ -11761,14 +11759,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11958,5 +11948,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Praktika perfekt!", + "greatPractice": "Praktika granda!", + "usedNoHints": "Bonega laboro ne uzante iujn indicojn!", + "youveCompletedPractice": "Vi kompletigis la praktikon, daŭrigu por pliboniĝi!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 066e58676..7d131fbd0 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:09:41.124551", + "@@last_modified": "2026-02-09 10:30:49.194487", "about": "Informazioni", "@about": { "type": "String", @@ -10740,8 +10740,6 @@ "congratulations": "Congratulazioni!", "anotherRound": "Un altro turno", "noActivityRequest": "Nessuna richiesta di attività attuale.", - "quit": "Esci", - "congratulationsYouveCompletedPractice": "Congratulazioni! Hai completato la sessione di pratica.", "mustHave10Words": "Devi avere almeno 10 parole di vocabolario per praticarle. Prova a parlare con un amico o con Pangea Bot per scoprire di più!", "botSettings": "Impostazioni del Bot", "activitySettingsOverrideWarning": "Lingua e livello di lingua determinati dal piano di attività", @@ -10790,14 +10788,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10987,5 +10977,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Pratica perfetta!", + "greatPractice": "Ottima pratica!", + "usedNoHints": "Ottimo lavoro non usando suggerimenti!", + "youveCompletedPractice": "Hai completato la pratica, continua così per migliorare!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index 360e48bfa..ac6b45a6e 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -1,6 +1,6 @@ { "@@locale": "ja", - "@@last_modified": "2026-02-05 10:10:15.587333", + "@@last_modified": "2026-02-09 10:31:29.266500", "about": "このアプリについて", "@about": { "type": "String", @@ -11527,8 +11527,6 @@ "congratulations": "おめでとうございます!", "anotherRound": "もう一回", "noActivityRequest": "現在のアクティビティリクエストはありません。", - "quit": "終了", - "congratulationsYouveCompletedPractice": "おめでとうございます!練習セッションを完了しました。", "mustHave10Words": "練習するには、少なくとも10語の語彙が必要です。友達やPangea Botに話しかけて、もっと発見してみてください!", "botSettings": "ボット設定", "activitySettingsOverrideWarning": "アクティビティプランによって決定された言語と言語レベル", @@ -11577,14 +11575,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11774,5 +11764,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "完璧な練習!", + "greatPractice": "素晴らしい練習!", + "usedNoHints": "ヒントを使わずによくやった!", + "youveCompletedPractice": "練習を完了しました。これを続けて上達してください!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ka.arb b/lib/l10n/intl_ka.arb index 78003f70e..876451d36 100644 --- a/lib/l10n/intl_ka.arb +++ b/lib/l10n/intl_ka.arb @@ -2591,7 +2591,7 @@ "playWithAI": "ამ დროისთვის ითამაშეთ AI-თან", "courseStartDesc": "Pangea Bot მზადაა ნებისმიერ დროს გასასვლელად!\n\n...მაგრამ სწავლა უკეთესია მეგობრებთან ერთად!", "@@locale": "ka", - "@@last_modified": "2026-02-05 10:10:20.523925", + "@@last_modified": "2026-02-09 10:31:35.201910", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11767,8 +11767,6 @@ "congratulations": "გილოცავთ!", "anotherRound": "მეორე რაუნდი", "noActivityRequest": "ამჟამად აქტივობის მოთხოვნა არ არის.", - "quit": "გამოსვლა", - "congratulationsYouveCompletedPractice": "გილოცავთ! თქვენ დაასრულეთ პრაქტიკის სესია.", "mustHave10Words": "თქვენ უნდა გქონდეთ მინიმუმ 10 სიტყვა, რომ მათ პრაქტიკაში გამოიყენოთ. სცადეთ მეგობართან ან Pangea Bot-თან საუბარი, რომ მეტი აღმოაჩინოთ!", "botSettings": "ბოტის პარამეტრები", "activitySettingsOverrideWarning": "ენასა და ენების დონეს განსაზღვრავს აქტივობის გეგმა", @@ -11817,14 +11815,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12014,5 +12004,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "შესანიშნავი პრაქტიკა!", + "greatPractice": "დიდებული პრაქტიკა!", + "usedNoHints": "კარგი საქმე, რომ არ გამოიყენე არცერთი მინიშნება!", + "youveCompletedPractice": "თქვენ დაასრულეთ პრაქტიკა, გააგრძელეთ ასე, რომ უკეთესი გახდეთ!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ko.arb b/lib/l10n/intl_ko.arb index 63b504369..f79ecf8f8 100644 --- a/lib/l10n/intl_ko.arb +++ b/lib/l10n/intl_ko.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:09:10.325473", + "@@last_modified": "2026-02-09 10:30:18.919050", "about": "소개", "@about": { "type": "String", @@ -10845,8 +10845,6 @@ "congratulations": "축하합니다!", "anotherRound": "또 다른 라운드", "noActivityRequest": "현재 활동 요청이 없습니다.", - "quit": "종료", - "congratulationsYouveCompletedPractice": "축하합니다! 연습 세션을 완료했습니다.", "mustHave10Words": "연습할 단어가 최소 10개 이상 있어야 합니다. 친구나 Pangea Bot과 대화하여 더 많은 것을 발견해 보세요!", "botSettings": "봇 설정", "activitySettingsOverrideWarning": "활동 계획에 의해 결정된 언어 및 언어 수준", @@ -10895,14 +10893,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11092,5 +11082,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "완벽한 연습!", + "greatPractice": "훌륭한 연습!", + "usedNoHints": "힌트를 사용하지 않아서 잘했어요!", + "youveCompletedPractice": "연습을 완료했습니다. 계속해서 더 나아지세요!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lt.arb b/lib/l10n/intl_lt.arb index 8a69923f6..280b130fb 100644 --- a/lib/l10n/intl_lt.arb +++ b/lib/l10n/intl_lt.arb @@ -3858,7 +3858,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": "2026-02-05 10:10:01.069181", + "@@last_modified": "2026-02-09 10:31:13.179961", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11542,8 +11542,6 @@ "congratulations": "Sveikiname!", "anotherRound": "Dar viena raundas", "noActivityRequest": "Nėra dabartinio veiklos prašymo.", - "quit": "Išeiti", - "congratulationsYouveCompletedPractice": "Sveikiname! Jūs baigėte praktikos sesiją.", "mustHave10Words": "Turite turėti bent 10 žodžių, kad galėtumėte juos praktikuoti. Pabandykite pasikalbėti su draugu arba Pangea Bot, kad sužinotumėte daugiau!", "botSettings": "Roboto nustatymai", "activitySettingsOverrideWarning": "Kalba ir kalbos lygis nustatomi pagal veiklos planą", @@ -11592,14 +11590,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11789,5 +11779,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Tobulas praktika!", + "greatPractice": "Puiki praktika!", + "usedNoHints": "Puikus darbas, kad nenaudojote jokių užuominų!", + "youveCompletedPractice": "Jūs baigėte praktiką, tęskite, kad taptumėte geresni!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index 55e1affc6..d51702338 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -4480,7 +4480,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": "2026-02-05 10:09:54.766036", + "@@last_modified": "2026-02-09 10:31:05.908661", "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", @@ -10723,8 +10723,6 @@ "congratulations": "Apsveicam!", "anotherRound": "Vēl viena kārta", "noActivityRequest": "Nav pašreizējo aktivitāšu pieprasījumu.", - "quit": "Iziet", - "congratulationsYouveCompletedPractice": "Apsveicam! Jūs esat pabeidzis prakses sesiju.", "mustHave10Words": "Jums jābūt vismaz 10 vārdiem, lai tos praktizētu. Mēģiniet parunāt ar draugu vai Pangea Bot, lai uzzinātu vairāk!", "botSettings": "Bota iestatījumi", "activitySettingsOverrideWarning": "Valoda un valodas līmenis, ko nosaka aktivitāšu plāns", @@ -10773,14 +10771,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10970,5 +10960,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Lieliska prakse!", + "greatPractice": "Lieliska prakse!", + "usedNoHints": "Lieliski, ka neizmantoji nevienu padomu!", + "youveCompletedPractice": "Tu esi pabeidzis praksi, turpini tādā garā, lai uzlabotos!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb index 9b520323a..faf5dc164 100644 --- a/lib/l10n/intl_nb.arb +++ b/lib/l10n/intl_nb.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:09:45.325631", + "@@last_modified": "2026-02-09 10:30:55.280815", "about": "Om", "@about": { "type": "String", @@ -11830,8 +11830,6 @@ "congratulations": "Gratulerer!", "anotherRound": "En runde til", "noActivityRequest": "Ingen nåværende aktivitetsforespørsel.", - "quit": "Avslutt", - "congratulationsYouveCompletedPractice": "Gratulerer! Du har fullført økt med øvelser.", "mustHave10Words": "Du må ha minst 10 ordforråd for å øve på dem. Prøv å snakke med en venn eller Pangea Bot for å oppdage mer!", "botSettings": "Bot-innstillinger", "activitySettingsOverrideWarning": "Språk og språknivå bestemt av aktivitetsplan", @@ -11880,14 +11878,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12077,5 +12067,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Perfekt øvelse!", + "greatPractice": "Flott øvelse!", + "usedNoHints": "Bra jobba med å ikke bruke noen hint!", + "youveCompletedPractice": "Du har fullført øvelsen, fortsett slik for å bli bedre!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index 6dea520bb..981a2e752 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:10:04.986596", + "@@last_modified": "2026-02-09 10:31:17.188799", "about": "Over ons", "@about": { "type": "String", @@ -10737,8 +10737,6 @@ "congratulations": "Gefeliciteerd!", "anotherRound": "Nog een ronde", "noActivityRequest": "Geen huidige activiteit aanvraag.", - "quit": "Afsluiten", - "congratulationsYouveCompletedPractice": "Gefeliciteerd! Je hebt de oefensessie voltooid.", "mustHave10Words": "Je moet minstens 10 vocabulairewoorden hebben om ze te oefenen. Probeer met een vriend of Pangea Bot te praten om meer te ontdekken!", "botSettings": "Botinstellingen", "activitySettingsOverrideWarning": "Taal en taalniveau bepaald door het activiteitenplan", @@ -10787,14 +10785,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10984,5 +10974,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Perfecte oefening!", + "greatPractice": "Geweldige oefening!", + "usedNoHints": "Goed gedaan, geen hints gebruikt!", + "youveCompletedPractice": "Je hebt de oefening voltooid, ga zo door om beter te worden!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index aaa6f96a0..2bdb85519 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -1,6 +1,6 @@ { "@@locale": "pl", - "@@last_modified": "2026-02-05 10:10:11.791789", + "@@last_modified": "2026-02-09 10:31:24.557539", "about": "O aplikacji", "@about": { "type": "String", @@ -10735,8 +10735,6 @@ "congratulations": "Gratulacje!", "anotherRound": "Kolejna runda", "noActivityRequest": "Brak bieżącego żądania aktywności.", - "quit": "Zakończ", - "congratulationsYouveCompletedPractice": "Gratulacje! Ukończyłeś sesję ćwiczeń.", "mustHave10Words": "Musisz mieć co najmniej 10 słówek do ćwiczenia. Spróbuj porozmawiać z przyjacielem lub Pangea Bot, aby odkryć więcej!", "botSettings": "Ustawienia bota", "activitySettingsOverrideWarning": "Język i poziom językowy określone przez plan aktywności", @@ -10785,14 +10783,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10982,5 +10972,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Idealna praktyka!", + "greatPractice": "Świetna praktyka!", + "usedNoHints": "Dobra robota, że nie korzystałeś z żadnych wskazówek!", + "youveCompletedPractice": "Ukończyłeś praktykę, kontynuuj, aby się poprawić!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 9b8ecb9b7..6f537dcd1 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:09:34.897101", + "@@last_modified": "2026-02-09 10:30:42.465226", "copiedToClipboard": "Copiada para a área de transferência", "@copiedToClipboard": { "type": "String", @@ -11837,8 +11837,6 @@ "congratulations": "Parabéns!", "anotherRound": "Outra rodada", "noActivityRequest": "Nenhum pedido de atividade atual.", - "quit": "Sair", - "congratulationsYouveCompletedPractice": "Parabéns! Você completou a sessão de prática.", "mustHave10Words": "Você deve ter pelo menos 10 palavras de vocabulário para praticá-las. Tente conversar com um amigo ou com o Pangea Bot para descobrir mais!", "botSettings": "Configurações do Bot", "activitySettingsOverrideWarning": "Idioma e nível de idioma determinados pelo plano de atividade", @@ -11887,14 +11885,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12084,5 +12074,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Prática perfeita!", + "greatPractice": "Ótima prática!", + "usedNoHints": "Bom trabalho em não usar dicas!", + "youveCompletedPractice": "Você completou a prática, continue assim para melhorar!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "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 cbe1ca38b..6fd6bd30c 100644 --- a/lib/l10n/intl_pt_BR.arb +++ b/lib/l10n/intl_pt_BR.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:09:31.755690", + "@@last_modified": "2026-02-09 10:30:39.705540", "about": "Sobre", "@about": { "type": "String", @@ -11095,8 +11095,6 @@ "congratulations": "Parabéns!", "anotherRound": "Outra rodada", "noActivityRequest": "Nenhum pedido de atividade atual.", - "quit": "Sair", - "congratulationsYouveCompletedPractice": "Parabéns! Você completou a sessão de prática.", "mustHave10Words": "Você deve ter pelo menos 10 palavras de vocabulário para praticá-las. Tente conversar com um amigo ou com o Pangea Bot para descobrir mais!", "botSettings": "Configurações do Bot", "activitySettingsOverrideWarning": "Idioma e nível de idioma determinados pelo plano de atividade", @@ -11145,14 +11143,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11342,5 +11332,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Prática perfeita!", + "greatPractice": "Ótima prática!", + "usedNoHints": "Bom trabalho não usando dicas!", + "youveCompletedPractice": "Você completou a prática, continue assim para melhorar!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "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 c74ddde52..2e2dad6cf 100644 --- a/lib/l10n/intl_pt_PT.arb +++ b/lib/l10n/intl_pt_PT.arb @@ -3328,7 +3328,7 @@ "selectAll": "Selecionar tudo", "deselectAll": "Desmarcar tudo", "@@locale": "pt_PT", - "@@last_modified": "2026-02-05 10:09:50.725651", + "@@last_modified": "2026-02-09 10:31:01.370163", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11766,8 +11766,6 @@ "congratulations": "Parabéns!", "anotherRound": "Outra rodada", "noActivityRequest": "Nenhum pedido de atividade atual.", - "quit": "Sair", - "congratulationsYouveCompletedPractice": "Parabéns! Você completou a sessão de prática.", "mustHave10Words": "Você deve ter pelo menos 10 palavras de vocabulário para praticar. Tente conversar com um amigo ou com o Pangea Bot para descobrir mais!", "botSettings": "Configurações do Bot", "activitySettingsOverrideWarning": "Idioma e nível de idioma determinados pelo plano de atividade", @@ -11816,14 +11814,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12013,5 +12003,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Prática perfeita!", + "greatPractice": "Ótima prática!", + "usedNoHints": "Bom trabalho em não usar dicas!", + "youveCompletedPractice": "Você completou a prática, continue assim para melhorar!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb index 8dc92a39b..b63507f52 100644 --- a/lib/l10n/intl_ro.arb +++ b/lib/l10n/intl_ro.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:09:23.119007", + "@@last_modified": "2026-02-09 10:30:31.024987", "about": "Despre", "@about": { "type": "String", @@ -11472,8 +11472,6 @@ "congratulations": "Felicitări!", "anotherRound": "Încă o rundă", "noActivityRequest": "Nu există cereri de activitate curente.", - "quit": "Ieși", - "congratulationsYouveCompletedPractice": "Felicitări! Ai completat sesiunea de practică.", "mustHave10Words": "Trebuie să ai cel puțin 10 cuvinte de vocabular pentru a le exersa. Încearcă să vorbești cu un prieten sau cu Pangea Bot pentru a descoperi mai multe!", "botSettings": "Setări Bot", "activitySettingsOverrideWarning": "Limba și nivelul de limbă sunt determinate de planul de activitate", @@ -11522,14 +11520,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11719,5 +11709,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Practica perfectă!", + "greatPractice": "Practica grozavă!", + "usedNoHints": "Bravo că nu ai folosit niciun indiciu!", + "youveCompletedPractice": "Ai finalizat practica, continuă așa pentru a te îmbunătăți!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index 777cd260a..acd67ec0d 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -1,6 +1,6 @@ { "@@locale": "ru", - "@@last_modified": "2026-02-05 10:10:19.334362", + "@@last_modified": "2026-02-09 10:31:33.668055", "about": "О проекте", "@about": { "type": "String", @@ -10826,8 +10826,6 @@ "congratulations": "Поздравляем!", "anotherRound": "Еще один раунд", "noActivityRequest": "Нет текущего запроса на активность.", - "quit": "Выйти", - "congratulationsYouveCompletedPractice": "Поздравляем! Вы завершили практическую сессию.", "mustHave10Words": "Вы должны иметь как минимум 10 слов для практики. Попробуйте поговорить с другом или Pangea Bot, чтобы узнать больше!", "botSettings": "Настройки бота", "activitySettingsOverrideWarning": "Язык и уровень языка определяются планом активности", @@ -10876,14 +10874,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11092,5 +11082,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Идеальная практика!", + "greatPractice": "Отличная практика!", + "usedNoHints": "Хорошая работа, что не использовали подсказки!", + "youveCompletedPractice": "Вы завершили практику, продолжайте в том же духе, чтобы стать лучше!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sk.arb b/lib/l10n/intl_sk.arb index d6437f578..f372fb272 100644 --- a/lib/l10n/intl_sk.arb +++ b/lib/l10n/intl_sk.arb @@ -1,6 +1,6 @@ { "@@locale": "sk", - "@@last_modified": "2026-02-05 10:09:24.752898", + "@@last_modified": "2026-02-09 10:30:32.743132", "about": "O aplikácii", "@about": { "type": "String", @@ -11821,8 +11821,6 @@ "congratulations": "Gratulujeme!", "anotherRound": "Ďalšie kolo", "noActivityRequest": "Žiadna aktuálna požiadavka na aktivitu.", - "quit": "Ukončiť", - "congratulationsYouveCompletedPractice": "Gratulujeme! Dokončili ste cvičebnú reláciu.", "mustHave10Words": "Musíte mať aspoň 10 slovíčok na precvičovanie. Skúste sa porozprávať s priateľom alebo Pangea Botom, aby ste objavili viac!", "botSettings": "Nastavenia bota", "activitySettingsOverrideWarning": "Jazyk a jazyková úroveň určené plánom aktivity", @@ -11871,14 +11869,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12068,5 +12058,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Dokonalá prax!", + "greatPractice": "Skvelá prax!", + "usedNoHints": "Dobrý výkon, že si nepoužil žiadne nápovedy!", + "youveCompletedPractice": "Dokončil si prax, pokračuj v tom, aby si sa zlepšil!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sl.arb b/lib/l10n/intl_sl.arb index 9743b3040..3a79289b9 100644 --- a/lib/l10n/intl_sl.arb +++ b/lib/l10n/intl_sl.arb @@ -2461,7 +2461,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": "2026-02-05 10:09:38.721866", + "@@last_modified": "2026-02-09 10:30:46.615986", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11818,8 +11818,6 @@ "congratulations": "Čestitamo!", "anotherRound": "Še en krog", "noActivityRequest": "Trenutno ni zahtevka za aktivnost.", - "quit": "Izhod", - "congratulationsYouveCompletedPractice": "Čestitamo! Zaključili ste vadbeno sejo.", "mustHave10Words": "Imeti morate vsaj 10 besed za besedišče, da jih lahko vadite. Poskusite se pogovoriti s prijateljem ali Pangea Botom, da odkrijete več!", "botSettings": "Nastavitve bota", "activitySettingsOverrideWarning": "Jezik in jezikovna raven sta določena z načrtom aktivnosti", @@ -11868,14 +11866,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12065,5 +12055,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Popolna praksa!", + "greatPractice": "Super praksa!", + "usedNoHints": "Odlično, da niste uporabili nobenih namigov!", + "youveCompletedPractice": "Zaključili ste prakso, nadaljujte tako, da boste boljši!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sr.arb b/lib/l10n/intl_sr.arb index 831875ff3..b064171a5 100644 --- a/lib/l10n/intl_sr.arb +++ b/lib/l10n/intl_sr.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:10:22.625655", + "@@last_modified": "2026-02-09 10:31:36.571438", "about": "О програму", "@about": { "type": "String", @@ -11839,8 +11839,6 @@ "congratulations": "Čestitamo!", "anotherRound": "Još jedan krug", "noActivityRequest": "Nema trenutnog zahteva za aktivnost.", - "quit": "Izlaz", - "congratulationsYouveCompletedPractice": "Čestitamo! Završili ste sesiju vežbanja.", "mustHave10Words": "Morate imati najmanje 10 reči za rečnik da biste ih vežbali. Pokušajte da razgovarate sa prijateljem ili Pangea Bot-om da biste otkrili više!", "botSettings": "Podešavanja Bota", "activitySettingsOverrideWarning": "Jezik i nivo jezika određeni planom aktivnosti", @@ -11889,14 +11887,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12086,5 +12076,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Savršena praksa!", + "greatPractice": "Sjajna praksa!", + "usedNoHints": "Odlično, niste koristili nikakve savete!", + "youveCompletedPractice": "Završili ste praksu, nastavite tako da postanete bolji!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb index 721c6fbe0..c5a281579 100644 --- a/lib/l10n/intl_sv.arb +++ b/lib/l10n/intl_sv.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:10:13.035755", + "@@last_modified": "2026-02-09 10:31:25.986941", "about": "Om", "@about": { "type": "String", @@ -11215,8 +11215,6 @@ "congratulations": "Grattis!", "anotherRound": "En runda till", "noActivityRequest": "Ingen aktuell aktivitetsförfrågan.", - "quit": "Avsluta", - "congratulationsYouveCompletedPractice": "Grattis! Du har slutfört övningssessionen.", "mustHave10Words": "Du måste ha minst 10 ord för att öva dem. Försök att prata med en vän eller Pangea Bot för att upptäcka mer!", "botSettings": "Botinställningar", "activitySettingsOverrideWarning": "Språk och språknivå bestäms av aktivitetsplanen", @@ -11265,14 +11263,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11462,5 +11452,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Perfekt träning!", + "greatPractice": "Bra träning!", + "usedNoHints": "Bra jobbat utan att använda några ledtrådar!", + "youveCompletedPractice": "Du har slutfört träningen, fortsätt så för att bli bättre!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ta.arb b/lib/l10n/intl_ta.arb index 744131c01..82c5efb6a 100644 --- a/lib/l10n/intl_ta.arb +++ b/lib/l10n/intl_ta.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:10:03.555298", + "@@last_modified": "2026-02-09 10:31:16.047418", "acceptedTheInvitation": "👍 {username} அழைப்பை ஏற்றுக்கொண்டது", "@acceptedTheInvitation": { "type": "String", @@ -10961,8 +10961,6 @@ "congratulations": "வாழ்த்துகள்!", "anotherRound": "மற்றொரு சுற்று", "noActivityRequest": "தற்போதைய செயல்பாட்டுக்கான கோரிக்கை இல்லை.", - "quit": "விலகுங்கள்", - "congratulationsYouveCompletedPractice": "வாழ்த்துகள்! நீங்கள் பயிற்சி அமர்வை முடித்துவிட்டீர்கள்.", "mustHave10Words": "நீங்கள் பயிற்சிக்காக குறைந்தது 10 சொற்களை வைத்திருக்க வேண்டும். மேலும் கண்டுபிடிக்க நண்பருடன் அல்லது பாஙோ பாட்டுடன் பேச முயற்சிக்கவும்!", "botSettings": "பாடல் அமைப்புகள்", "activitySettingsOverrideWarning": "செயல்பாட்டு திட்டத்தால் நிர்ணயிக்கப்பட்ட மொழி மற்றும் மொழி நிலை", @@ -11011,14 +11009,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11208,5 +11198,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "சரியான பயிற்சி!", + "greatPractice": "மிகவும் நல்ல பயிற்சி!", + "usedNoHints": "எந்த உதவியையும் பயன்படுத்தாததற்கு நல்ல வேலை!", + "youveCompletedPractice": "நீங்கள் பயிற்சியை முடித்துவிட்டீர்கள், மேலும் மேம்பட தொடர்ந்து முயற்சிக்கவும்!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_te.arb b/lib/l10n/intl_te.arb index e1f8f030c..5dbeb11ec 100644 --- a/lib/l10n/intl_te.arb +++ b/lib/l10n/intl_te.arb @@ -1917,7 +1917,7 @@ "playWithAI": "ఇప్పుడే AI తో ఆడండి", "courseStartDesc": "పాంజియా బాట్ ఎప్పుడైనా సిద్ధంగా ఉంటుంది!\n\n...కానీ స్నేహితులతో నేర్చుకోవడం మెరుగైనది!", "@@locale": "te", - "@@last_modified": "2026-02-05 10:09:59.064928", + "@@last_modified": "2026-02-09 10:31:11.484072", "@setCustomPermissionLevel": { "type": "String", "placeholders": {} @@ -11826,8 +11826,6 @@ "congratulations": "అభినందనలు!", "anotherRound": "మరొక రౌండ్", "noActivityRequest": "ప్రస్తుతం ఎలాంటి కార్యకలాపం అభ్యర్థన లేదు.", - "quit": "విడుదల", - "congratulationsYouveCompletedPractice": "అభినందనలు! మీరు అభ్యాస సెషన్‌ను పూర్తి చేశారు.", "mustHave10Words": "మీరు వాటిని అభ్యాసం చేయడానికి కనీసం 10 పదాలను కలిగి ఉండాలి. మరింత తెలుసుకోవడానికి మీ స్నేహితుడితో లేదా పాంజియా బాట్‌తో మాట్లాడండి!", "botSettings": "బాట్ సెట్టింగులు", "activitySettingsOverrideWarning": "కార్యకలాపం ప్రణాళిక ద్వారా నిర్ణయించబడిన భాష మరియు భాష స్థాయి", @@ -11876,14 +11874,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12073,5 +12063,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "సంపూర్ణ అభ్యాసం!", + "greatPractice": "మంచి అభ్యాసం!", + "usedNoHints": "ఏ సూచనలు ఉపయోగించకపోవడం మంచి పని!", + "youveCompletedPractice": "మీరు అభ్యాసం పూర్తి చేసారు, మెరుగుపడటానికి ఇలాగే కొనసాగించండి!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_th.arb b/lib/l10n/intl_th.arb index 2f5e88895..d048c59c9 100644 --- a/lib/l10n/intl_th.arb +++ b/lib/l10n/intl_th.arb @@ -4453,7 +4453,7 @@ "playWithAI": "เล่นกับ AI ชั่วคราว", "courseStartDesc": "Pangea Bot พร้อมที่จะเริ่มต้นได้ทุกเมื่อ!\n\n...แต่การเรียนรู้ดีกว่ากับเพื่อน!", "@@locale": "th", - "@@last_modified": "2026-02-05 10:09:49.236652", + "@@last_modified": "2026-02-09 10:31:00.286726", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11795,8 +11795,6 @@ "congratulations": "ขอแสดงความยินดี!", "anotherRound": "อีกหนึ่งรอบ", "noActivityRequest": "ไม่มีคำขอทำกิจกรรมในขณะนี้", - "quit": "ออก", - "congratulationsYouveCompletedPractice": "ขอแสดงความยินดี! คุณได้เสร็จสิ้นการฝึกฝนแล้ว", "mustHave10Words": "คุณต้องมีคำศัพท์อย่างน้อย 10 คำเพื่อฝึกฝน ลองพูดคุยกับเพื่อนหรือ Pangea Bot เพื่อค้นพบเพิ่มเติม!", "botSettings": "การตั้งค่า Bot", "activitySettingsOverrideWarning": "ภาษาและระดับภาษาที่กำหนดโดยแผนกิจกรรม", @@ -11845,14 +11843,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12042,5 +12032,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "การฝึกฝนที่สมบูรณ์แบบ!", + "greatPractice": "การฝึกฝนที่ยอดเยี่ยม!", + "usedNoHints": "ทำได้ดีที่ไม่ใช้คำใบ้ใด ๆ!", + "youveCompletedPractice": "คุณได้ทำการฝึกฝนเสร็จสิ้นแล้ว ทำต่อไปเพื่อให้ดีขึ้น!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb index 3df573555..0048a617e 100644 --- a/lib/l10n/intl_tr.arb +++ b/lib/l10n/intl_tr.arb @@ -1,6 +1,6 @@ { "@@locale": "tr", - "@@last_modified": "2026-02-05 10:09:57.710087", + "@@last_modified": "2026-02-09 10:31:10.118107", "about": "Hakkında", "@about": { "type": "String", @@ -10959,8 +10959,6 @@ "congratulations": "Tebrikler!", "anotherRound": "Bir tur daha", "noActivityRequest": "Şu anda etkinlik talebi yok.", - "quit": "Çık", - "congratulationsYouveCompletedPractice": "Tebrikler! Pratik oturumunu tamamladınız.", "mustHave10Words": "Pratik yapmak için en az 10 kelimeye sahip olmalısınız. Daha fazla keşfetmek için bir arkadaşınızla veya Pangea Bot ile konuşmayı deneyin!", "botSettings": "Bot Ayarları", "activitySettingsOverrideWarning": "Etkinlik planı tarafından belirlenen dil ve dil seviyesi", @@ -11009,14 +11007,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -11206,5 +11196,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Mükemmel pratik!", + "greatPractice": "Harika pratik!", + "usedNoHints": "Hiç ipucu kullanmadığın için iyi iş çıkardın!", + "youveCompletedPractice": "Pratiği tamamladın, daha iyi olmak için devam et!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_uk.arb b/lib/l10n/intl_uk.arb index d4d7de8bb..dbfcea87b 100644 --- a/lib/l10n/intl_uk.arb +++ b/lib/l10n/intl_uk.arb @@ -1,6 +1,6 @@ { "@@locale": "uk", - "@@last_modified": "2026-02-05 10:09:42.549877", + "@@last_modified": "2026-02-09 10:30:50.645170", "about": "Про застосунок", "@about": { "type": "String", @@ -10731,8 +10731,6 @@ "congratulations": "Вітаємо!", "anotherRound": "Ще один раунд", "noActivityRequest": "Немає поточного запиту на активність.", - "quit": "Вийти", - "congratulationsYouveCompletedPractice": "Вітаємо! Ви завершили практичну сесію.", "mustHave10Words": "Вам потрібно мати принаймні 10 слів для практики. Спробуйте поговорити з другом або Pangea Bot, щоб дізнатися більше!", "botSettings": "Налаштування бота", "activitySettingsOverrideWarning": "Мова та рівень мови визначаються планом активності", @@ -10781,14 +10779,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10978,5 +10968,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Ідеальна практика!", + "greatPractice": "Чудова практика!", + "usedNoHints": "Чудова робота, що не використовували підказки!", + "youveCompletedPractice": "Ви завершили практику, продовжуйте в тому ж дусі, щоб покращитися!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_vi.arb b/lib/l10n/intl_vi.arb index 7c8c9bc73..a8b484fc8 100644 --- a/lib/l10n/intl_vi.arb +++ b/lib/l10n/intl_vi.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:10:02.295528", + "@@last_modified": "2026-02-09 10:31:14.436728", "about": "Giới thiệu", "@about": { "type": "String", @@ -6315,8 +6315,6 @@ "congratulations": "Chúc mừng!", "anotherRound": "Một vòng nữa", "noActivityRequest": "Không có yêu cầu hoạt động nào hiện tại.", - "quit": "Thoát", - "congratulationsYouveCompletedPractice": "Chúc mừng! Bạn đã hoàn thành buổi thực hành.", "mustHave10Words": "Bạn phải có ít nhất 10 từ vựng để thực hành. Hãy thử nói chuyện với một người bạn hoặc Pangea Bot để khám phá thêm!", "botSettings": "Cài đặt Bot", "activitySettingsOverrideWarning": "Ngôn ngữ và cấp độ ngôn ngữ được xác định bởi kế hoạch hoạt động", @@ -6365,14 +6363,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -6562,5 +6552,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "Thực hành hoàn hảo!", + "greatPractice": "Thực hành tuyệt vời!", + "usedNoHints": "Làm tốt lắm khi không sử dụng bất kỳ gợi ý nào!", + "youveCompletedPractice": "Bạn đã hoàn thành thực hành, hãy tiếp tục để cải thiện!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_yue.arb b/lib/l10n/intl_yue.arb index 410706220..b796030d0 100644 --- a/lib/l10n/intl_yue.arb +++ b/lib/l10n/intl_yue.arb @@ -1853,7 +1853,7 @@ "selectAll": "全選", "deselectAll": "取消全選", "@@locale": "yue", - "@@last_modified": "2026-02-05 10:09:39.916672", + "@@last_modified": "2026-02-09 10:30:47.898227", "@ignoreUser": { "type": "String", "placeholders": {} @@ -11828,8 +11828,6 @@ "congratulations": "恭喜!", "anotherRound": "再來一輪", "noActivityRequest": "目前沒有活動請求。", - "quit": "退出", - "congratulationsYouveCompletedPractice": "恭喜!你已完成練習課程。", "mustHave10Words": "你必須至少有 10 個詞彙來練習它們。試著和朋友或 Pangea Bot 談談以發現更多!", "botSettings": "機械人設置", "activitySettingsOverrideWarning": "活動計劃決定的語言和語言水平", @@ -11878,14 +11876,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -12075,5 +12065,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "完美的練習!", + "greatPractice": "很棒的練習!", + "usedNoHints": "不使用任何提示,做得好!", + "youveCompletedPractice": "你已經完成了練習,繼續努力以變得更好!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index e141c5b19..50917324d 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -1,6 +1,6 @@ { "@@locale": "zh", - "@@last_modified": "2026-02-05 10:10:07.531332", + "@@last_modified": "2026-02-09 10:31:19.946784", "about": "关于", "@about": { "type": "String", @@ -10728,8 +10728,6 @@ "congratulations": "恭喜!", "anotherRound": "再来一轮", "noActivityRequest": "当前没有活动请求。", - "quit": "退出", - "congratulationsYouveCompletedPractice": "恭喜!您已完成练习课程。", "mustHave10Words": "您必须至少有 10 个词汇来进行练习。尝试与朋友或 Pangea Bot 交谈以发现更多!", "botSettings": "机器人设置", "activitySettingsOverrideWarning": "活动计划确定的语言和语言级别", @@ -10778,14 +10776,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10975,5 +10965,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "完美的练习!", + "greatPractice": "很棒的练习!", + "usedNoHints": "很好,没使用任何提示!", + "youveCompletedPractice": "你已经完成了练习,继续努力以变得更好!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "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 0aea18e73..6180510c5 100644 --- a/lib/l10n/intl_zh_Hant.arb +++ b/lib/l10n/intl_zh_Hant.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-05 10:09:52.100652", + "@@last_modified": "2026-02-09 10:31:02.904070", "about": "關於", "@about": { "type": "String", @@ -10735,8 +10735,6 @@ "congratulations": "恭喜!", "anotherRound": "再來一輪", "noActivityRequest": "目前沒有活動請求。", - "quit": "退出", - "congratulationsYouveCompletedPractice": "恭喜!您已完成練習課程。", "mustHave10Words": "您必須至少有 10 個詞彙來進行練習。嘗試與朋友或 Pangea Bot 交談以發現更多!", "botSettings": "機器人設定", "activitySettingsOverrideWarning": "語言和語言級別由活動計劃決定", @@ -10785,14 +10783,6 @@ "type": "String", "placeholders": {} }, - "@quit": { - "type": "String", - "placeholders": {} - }, - "@congratulationsYouveCompletedPractice": { - "type": "String", - "placeholders": {} - }, "@mustHave10Words": { "type": "String", "placeholders": {} @@ -10982,5 +10972,25 @@ "@grammarCopyPOScompn": { "type": "String", "placeholders": {} + }, + "perfectPractice": "完美的練習!", + "greatPractice": "很棒的練習!", + "usedNoHints": "不使用任何提示,做得好!", + "youveCompletedPractice": "你已完成練習,繼續努力以變得更好!", + "@perfectPractice": { + "type": "String", + "placeholders": {} + }, + "@greatPractice": { + "type": "String", + "placeholders": {} + }, + "@usedNoHints": { + "type": "String", + "placeholders": {} + }, + "@youveCompletedPractice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/pangea/analytics_data/analytics_data_service.dart b/lib/pangea/analytics_data/analytics_data_service.dart index bd371aa81..4c703aacb 100644 --- a/lib/pangea/analytics_data/analytics_data_service.dart +++ b/lib/pangea/analytics_data/analytics_data_service.dart @@ -241,7 +241,7 @@ class AnalyticsDataService { int? count, String? roomId, DateTime? since, - ConstructUseTypeEnum? type, + List? types, bool filterCapped = true, }) async { await _ensureInitialized(); @@ -249,7 +249,7 @@ class AnalyticsDataService { count: count, roomId: roomId, since: since, - type: type, + types: types, ); final blocked = blockedConstructs; diff --git a/lib/pangea/analytics_data/analytics_database.dart b/lib/pangea/analytics_data/analytics_database.dart index 870bd9f61..478f16155 100644 --- a/lib/pangea/analytics_data/analytics_database.dart +++ b/lib/pangea/analytics_data/analytics_database.dart @@ -204,7 +204,7 @@ class AnalyticsDatabase with DatabaseFileStorage { int? count, String? roomId, DateTime? since, - ConstructUseTypeEnum? type, + List? types, }) async { final stopwatch = Stopwatch()..start(); final results = []; @@ -216,7 +216,7 @@ class AnalyticsDatabase with DatabaseFileStorage { if (roomId != null && use.metadata.roomId != roomId) { return true; // skip but continue } - if (type != null && use.useType != type) { + if (types != null && !types.contains(use.useType)) { return true; // skip but continue } diff --git a/lib/pangea/analytics_practice/analytics_practice_page.dart b/lib/pangea/analytics_practice/analytics_practice_page.dart index 1bcc52d01..b64b363f1 100644 --- a/lib/pangea/analytics_practice/analytics_practice_page.dart +++ b/lib/pangea/analytics_practice/analytics_practice_page.dart @@ -13,6 +13,7 @@ import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_use_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; import 'package:fluffychat/pangea/analytics_misc/example_message_util.dart'; +import 'package:fluffychat/pangea/analytics_practice/analytics_practice_constants.dart'; import 'package:fluffychat/pangea/analytics_practice/analytics_practice_session_model.dart'; import 'package:fluffychat/pangea/analytics_practice/analytics_practice_session_repo.dart'; import 'package:fluffychat/pangea/analytics_practice/analytics_practice_view.dart'; @@ -101,6 +102,8 @@ class AnalyticsPracticeState extends State ValueNotifier(null); final ValueNotifier hintPressedNotifier = ValueNotifier(false); + final ValueNotifier hintsUsedNotifier = ValueNotifier(0); + static const int maxHints = 5; final Map> _choiceTexts = {}; final Map> _choiceEmojis = {}; @@ -127,6 +130,7 @@ class AnalyticsPracticeState extends State enableChoicesNotifier.dispose(); selectedMorphChoice.dispose(); hintPressedNotifier.dispose(); + hintsUsedNotifier.dispose(); super.dispose(); } @@ -213,6 +217,7 @@ class AnalyticsPracticeState extends State activityTarget.value = null; selectedMorphChoice.value = null; hintPressedNotifier.value = false; + hintsUsedNotifier.value = 0; enableChoicesNotifier.value = true; progressNotifier.value = 0.0; _queue.clear(); @@ -483,7 +488,11 @@ class AnalyticsPracticeState extends State } void onHintPressed() { - hintPressedNotifier.value = !hintPressedNotifier.value; + if (hintsUsedNotifier.value >= maxHints) return; + if (!hintPressedNotifier.value) { + hintsUsedNotifier.value++; + } + hintPressedNotifier.value = true; } Future onSelectChoice( @@ -556,6 +565,36 @@ class AnalyticsPracticeState extends State Future get derivedAnalyticsData => _analyticsService.derivedData; + /// Returns congratulations message based on performance + String getCompletionMessage(BuildContext context) { + final accuracy = _sessionLoader.value?.state.accuracy ?? 0; + final hasTimeBonus = (_sessionLoader.value?.state.elapsedSeconds ?? 0) <= + AnalyticsPracticeConstants.timeForBonus; + final hintsUsed = hintsUsedNotifier.value; + + final bool perfectAccuracy = accuracy == 100; + final bool noHintsUsed = hintsUsed == 0; + final bool hintsAvailable = widget.type == ConstructTypeEnum.morph; + + //check how many conditions for bonuses the user met and return message accordingly + final conditionsMet = [ + perfectAccuracy, + !hintsAvailable || noHintsUsed, + hasTimeBonus, + ].where((c) => c).length; + + if (conditionsMet == 3) { + return L10n.of(context).perfectPractice; + } + if (conditionsMet >= 2) { + return L10n.of(context).greatPractice; + } + if (hintsAvailable && noHintsUsed) { + return L10n.of(context).usedNoHints; + } + return L10n.of(context).youveCompletedPractice; + } + @override Widget build(BuildContext context) => AnalyticsPracticeView(this); } diff --git a/lib/pangea/analytics_practice/analytics_practice_session_repo.dart b/lib/pangea/analytics_practice/analytics_practice_session_repo.dart index 5e82d6b6d..abf2b47b0 100644 --- a/lib/pangea/analytics_practice/analytics_practice_session_repo.dart +++ b/lib/pangea/analytics_practice/analytics_practice_session_repo.dart @@ -242,17 +242,24 @@ class AnalyticsPracticeSessionRepo { } static Future> _fetchErrors() async { - // Fetch all recent uses in one call (not filtering blocked constructs) final allRecentUses = await MatrixState .pangeaController.matrixState.analyticsDataService - .getUses(count: 200, filterCapped: false); + .getUses( + count: 300, + filterCapped: false, + types: [ + ConstructUseTypeEnum.ga, + ConstructUseTypeEnum.corGE, + ConstructUseTypeEnum.incGE, + ], + ); // Filter for grammar error uses final grammarErrorUses = allRecentUses .where((use) => use.useType == ConstructUseTypeEnum.ga) .toList(); - // Create list of recently used constructs + // Create list of recently practiced constructs (last 24 hours) final cutoffTime = DateTime.now().subtract(const Duration(hours: 24)); final recentlyPracticedConstructs = allRecentUses .where( diff --git a/lib/pangea/analytics_practice/analytics_practice_view.dart b/lib/pangea/analytics_practice/analytics_practice_view.dart index 9ada4f9d2..e425c7495 100644 --- a/lib/pangea/analytics_practice/analytics_practice_view.dart +++ b/lib/pangea/analytics_practice/analytics_practice_view.dart @@ -121,6 +121,12 @@ class _AnalyticsActivityView extends StatelessWidget { return ListView( children: [ + //Hints counter bar for grammar activities only + if (controller.widget.type == ConstructTypeEnum.morph) + Padding( + padding: const EdgeInsets.only(bottom: 16.0), + child: _HintsCounterBar(controller: controller), + ), //per-activity instructions, add switch statement once there are more types const InstructionsInlineTooltip( instructionsEnum: InstructionsEnum.selectMeaning, @@ -160,6 +166,10 @@ class _AnalyticsActivityView extends StatelessWidget { child: _AnalyticsPracticeCenterContent(controller: controller), ), const SizedBox(height: 16.0), + (controller.widget.type == ConstructTypeEnum.morph) + ? Center(child: _HintSection(controller: controller)) + : const SizedBox.shrink(), + const SizedBox(height: 16.0), _ActivityChoicesWidget(controller), const SizedBox(height: 16.0), _WrongAnswerFeedback(controller: controller), @@ -181,50 +191,35 @@ class _AnalyticsPracticeCenterContent extends StatelessWidget { valueListenable: controller.activityTarget, builder: (context, target, __) => switch (target?.target.activityType) { null => const SizedBox(), - ActivityTypeEnum.grammarError => SizedBox( - height: 160.0, - child: SingleChildScrollView( - child: ValueListenableBuilder( - valueListenable: controller.activityState, - builder: (context, state, __) => switch (state) { - AsyncLoaded( - value: final GrammarErrorPracticeActivityModel activity - ) => - Column( - mainAxisSize: MainAxisSize.min, - children: [ - _ErrorBlankWidget( - key: ValueKey( - '${activity.eventID}_${activity.errorOffset}_${activity.errorLength}', - ), - activity: activity, - ), - const SizedBox(height: 12), - ], - ), - _ => const SizedBox(), - }, - ), + ActivityTypeEnum.grammarError => SingleChildScrollView( + child: ListenableBuilder( + listenable: Listenable.merge([ + controller.activityState, + controller.hintPressedNotifier, + ]), + builder: (context, __) { + final state = controller.activityState.value; + if (state + is! AsyncLoaded) { + return const SizedBox(); + } + final activity = state.value; + if (activity is! GrammarErrorPracticeActivityModel) { + return const SizedBox(); + } + return _ErrorBlankWidget( + key: ValueKey( + '${activity.eventID}_${activity.errorOffset}_${activity.errorLength}', + ), + activity: activity, + showTranslation: controller.hintPressedNotifier.value, + ); + }, ), ), ActivityTypeEnum.grammarCategory => Center( - child: Column( - children: [ - _CorrectAnswerHint(controller: controller), - _ExampleMessageWidget( - controller.getExampleMessage(target!), - ), - const SizedBox(height: 12), - ValueListenableBuilder( - valueListenable: controller.hintPressedNotifier, - builder: (context, hintPressed, __) { - return HintButton( - depressed: hintPressed, - onPressed: controller.onHintPressed, - ); - }, - ), - ], + child: _ExampleMessageWidget( + controller.getExampleMessage(target!), ), ), _ => SizedBox( @@ -281,45 +276,96 @@ class _ExampleMessageWidget extends StatelessWidget { } } -class _CorrectAnswerHint extends StatelessWidget { +class _HintsCounterBar extends StatelessWidget { final AnalyticsPracticeState controller; - const _CorrectAnswerHint({ - required this.controller, - }); + const _HintsCounterBar({required this.controller}); @override Widget build(BuildContext context) { return ValueListenableBuilder( - valueListenable: controller.hintPressedNotifier, - builder: (context, hintPressed, __) { - if (!hintPressed) { + valueListenable: controller.hintsUsedNotifier, + builder: (context, hintsUsed, __) { + return Padding( + padding: const EdgeInsets.only(top: 4.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: List.generate( + AnalyticsPracticeState.maxHints, + (index) => Padding( + padding: const EdgeInsets.symmetric(horizontal: 4.0), + child: Icon( + index < hintsUsed ? Icons.lightbulb : Icons.lightbulb_outline, + size: 18, + color: Theme.of(context).colorScheme.primary, + ), + ), + ), + ), + ); + }, + ); + } +} + +class _HintSection extends StatelessWidget { + final AnalyticsPracticeState controller; + + const _HintSection({required this.controller}); + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: Listenable.merge([ + controller.activityState, + controller.hintPressedNotifier, + controller.hintsUsedNotifier, + ]), + builder: (context, __) { + final state = controller.activityState.value; + if (state is! AsyncLoaded) { return const SizedBox.shrink(); } - return ValueListenableBuilder( - valueListenable: controller.activityState, - builder: (context, state, __) { - if (state is! AsyncLoaded) { - return const SizedBox.shrink(); - } + final activity = state.value; + final hintPressed = controller.hintPressedNotifier.value; + final hintsUsed = controller.hintsUsedNotifier.value; + final maxHintsReached = hintsUsed >= AnalyticsPracticeState.maxHints; - final activity = state.value; - if (activity is! MorphPracticeActivityModel) { - return const SizedBox.shrink(); - } + return ConstrainedBox( + constraints: const BoxConstraints( + minHeight: 50.0, + ), + child: Builder( + builder: (context) { + // For grammar category: fade out button and show hint content + if (activity is MorphPracticeActivityModel) { + return AnimatedCrossFade( + duration: const Duration(milliseconds: 200), + crossFadeState: hintPressed + ? CrossFadeState.showSecond + : CrossFadeState.showFirst, + firstChild: HintButton( + onPressed: + maxHintsReached ? () {} : controller.onHintPressed, + depressed: maxHintsReached, + ), + secondChild: MorphMeaningWidget( + feature: activity.morphFeature, + tag: activity.multipleChoiceContent.answers.first, + ), + ); + } - final correctAnswerTag = - activity.multipleChoiceContent.answers.first; - - return Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: MorphMeaningWidget( - feature: activity.morphFeature, - tag: correctAnswerTag, - ), - ); - }, + // For grammar error: button stays pressed, hint shows in ErrorBlankWidget + return HintButton( + onPressed: (hintPressed || maxHintsReached) + ? () {} + : controller.onHintPressed, + depressed: hintPressed || maxHintsReached, + ); + }, + ), ); }, ); @@ -371,33 +417,21 @@ class _WrongAnswerFeedback extends StatelessWidget { } } -class _ErrorBlankWidget extends StatefulWidget { +class _ErrorBlankWidget extends StatelessWidget { final GrammarErrorPracticeActivityModel activity; + final bool showTranslation; const _ErrorBlankWidget({ super.key, required this.activity, + required this.showTranslation, }); - @override - State<_ErrorBlankWidget> createState() => _ErrorBlankWidgetState(); -} - -class _ErrorBlankWidgetState extends State<_ErrorBlankWidget> { - late final String translation = widget.activity.translation; - bool _showTranslation = false; - - void _toggleTranslation() { - setState(() { - _showTranslation = !_showTranslation; - }); - } - @override Widget build(BuildContext context) { - final text = widget.activity.text; - final errorOffset = widget.activity.errorOffset; - final errorLength = widget.activity.errorLength; + final text = activity.text; + final errorOffset = activity.errorOffset; + final errorLength = activity.errorLength; const maxContextChars = 50; @@ -444,66 +478,72 @@ class _ErrorBlankWidgetState extends State<_ErrorBlankWidget> { final after = chars.skip(errorEnd).take(afterEnd - errorEnd).toString(); - return Column( - children: [ - Container( - padding: const EdgeInsets.symmetric( - horizontal: 12, - vertical: 8, - ), - decoration: BoxDecoration( - color: Color.alphaBlend( - Colors.white.withAlpha(180), - ThemeData.dark().colorScheme.primary, - ), - borderRadius: BorderRadius.circular(16), - ), - child: Column( - children: [ - RichText( - text: TextSpan( - style: TextStyle( - color: Theme.of(context).colorScheme.onPrimaryFixed, - fontSize: - AppConfig.fontSizeFactor * AppConfig.messageFontSize, - ), - children: [ - if (trimmedBefore) const TextSpan(text: '…'), - if (before.isNotEmpty) TextSpan(text: before), - WidgetSpan( - child: Container( - height: 4.0, - width: (errorLength * 8).toDouble(), - padding: const EdgeInsets.only(bottom: 2.0), - decoration: BoxDecoration( - color: Theme.of(context).colorScheme.primary, - ), - ), - ), - if (after.isNotEmpty) TextSpan(text: after), - if (trimmedAfter) const TextSpan(text: '…'), - ], - ), - ), - const SizedBox(height: 8), - _showTranslation - ? Text( - translation, - style: TextStyle( - color: Theme.of(context).colorScheme.onPrimaryFixed, - fontSize: AppConfig.fontSizeFactor * - AppConfig.messageFontSize, - fontStyle: FontStyle.italic, - ), - textAlign: TextAlign.left, - ) - : const SizedBox.shrink(), - ], - ), + return Container( + padding: const EdgeInsets.symmetric( + horizontal: 12, + vertical: 8, + ), + decoration: BoxDecoration( + color: Color.alphaBlend( + Colors.white.withAlpha(180), + ThemeData.dark().colorScheme.primary, ), - const SizedBox(height: 8), - HintButton(depressed: _showTranslation, onPressed: _toggleTranslation), - ], + borderRadius: BorderRadius.circular(16), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + RichText( + text: TextSpan( + style: TextStyle( + color: Theme.of(context).colorScheme.onPrimaryFixed, + fontSize: AppConfig.fontSizeFactor * AppConfig.messageFontSize, + ), + children: [ + if (trimmedBefore) const TextSpan(text: '…'), + if (before.isNotEmpty) TextSpan(text: before), + WidgetSpan( + child: Container( + height: 4.0, + width: (errorLength * 8).toDouble(), + padding: const EdgeInsets.only(bottom: 2.0), + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.primary, + ), + ), + ), + if (after.isNotEmpty) TextSpan(text: after), + if (trimmedAfter) const TextSpan(text: '…'), + ], + ), + ), + AnimatedSize( + duration: const Duration(milliseconds: 200), + curve: Curves.easeInOut, + alignment: Alignment.topCenter, + child: showTranslation + ? Column( + mainAxisSize: MainAxisSize.min, + children: [ + const SizedBox(height: 8), + Text( + activity.translation, + style: TextStyle( + color: Theme.of(context).colorScheme.onPrimaryFixed, + fontSize: AppConfig.fontSizeFactor * + AppConfig.messageFontSize, + fontStyle: FontStyle.italic, + ), + textAlign: TextAlign.center, + maxLines: 3, + overflow: TextOverflow.ellipsis, + ), + ], + ) + : const SizedBox.shrink(), + ), + ], + ), ); } } diff --git a/lib/pangea/analytics_practice/completed_activity_session_view.dart b/lib/pangea/analytics_practice/completed_activity_session_view.dart index d9aefee22..31df2f6ce 100644 --- a/lib/pangea/analytics_practice/completed_activity_session_view.dart +++ b/lib/pangea/analytics_practice/completed_activity_session_view.dart @@ -47,7 +47,7 @@ class CompletedActivitySessionView extends StatelessWidget { child: Column( children: [ Text( - L10n.of(context).congratulationsYouveCompletedPractice, + controller.getCompletionMessage(context), style: Theme.of(context).textTheme.titleMedium?.copyWith( fontWeight: FontWeight.bold, ), @@ -171,7 +171,7 @@ class CompletedActivitySessionView extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - L10n.of(context).quit, + L10n.of(context).done, ), ], ),