diff --git a/lib/config/routes.dart b/lib/config/routes.dart index d14e93a99..7c2f9d42c 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -33,8 +33,12 @@ import 'package:fluffychat/pages/settings_password/settings_password.dart'; import 'package:fluffychat/pages/settings_security/settings_security.dart'; import 'package:fluffychat/pages/settings_style/settings_style.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_start/activity_session_start_page.dart'; +import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_navigation_util.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -import 'package:fluffychat/pangea/analytics_page/analytics_page.dart'; +import 'package:fluffychat/pangea/analytics_page/activity_archive.dart'; +import 'package:fluffychat/pangea/analytics_page/empty_analytics_page.dart'; +import 'package:fluffychat/pangea/analytics_summary/level_analytics_details_content.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/chat_settings/pages/edit_course.dart'; import 'package:fluffychat/pangea/chat_settings/pages/pangea_invitation_selection.dart'; @@ -518,11 +522,11 @@ abstract class AppRoutes { pageBuilder: (context, state) => defaultPageBuilder( context, state, - AnalyticsPage( - indicator: FluffyThemes.isColumnMode(context) - ? null - : ProgressIndicatorEnum.wordsUsed, - ), + FluffyThemes.isColumnMode(context) + ? const EmptyAnalyticsPage() + : const ConstructAnalyticsView( + view: ConstructTypeEnum.vocab, + ), ), routes: [ GoRoute( @@ -530,11 +534,11 @@ abstract class AppRoutes { pageBuilder: (context, state) => defaultPageBuilder( context, state, - AnalyticsPage( - indicator: FluffyThemes.isColumnMode(context) - ? null - : ProgressIndicatorEnum.morphsUsed, - ), + FluffyThemes.isColumnMode(context) + ? const EmptyAnalyticsPage() + : const ConstructAnalyticsView( + view: ConstructTypeEnum.morph, + ), ), redirect: loggedOutRedirect, routes: [ @@ -548,9 +552,9 @@ abstract class AppRoutes { return defaultPageBuilder( context, state, - AnalyticsPage( - indicator: ProgressIndicatorEnum.morphsUsed, + ConstructAnalyticsView( construct: construct, + view: ConstructTypeEnum.morph, ), ); }, @@ -562,11 +566,11 @@ abstract class AppRoutes { pageBuilder: (context, state) => defaultPageBuilder( context, state, - AnalyticsPage( - indicator: FluffyThemes.isColumnMode(context) - ? null - : ProgressIndicatorEnum.wordsUsed, - ), + FluffyThemes.isColumnMode(context) + ? const EmptyAnalyticsPage() + : const ConstructAnalyticsView( + view: ConstructTypeEnum.vocab, + ), ), redirect: loggedOutRedirect, routes: [ @@ -579,9 +583,9 @@ abstract class AppRoutes { return defaultPageBuilder( context, state, - AnalyticsPage( - indicator: ProgressIndicatorEnum.wordsUsed, + ConstructAnalyticsView( construct: construct, + view: ConstructTypeEnum.vocab, ), ); }, @@ -593,11 +597,9 @@ abstract class AppRoutes { pageBuilder: (context, state) => defaultPageBuilder( context, state, - AnalyticsPage( - indicator: FluffyThemes.isColumnMode(context) - ? null - : ProgressIndicatorEnum.activities, - ), + FluffyThemes.isColumnMode(context) + ? const EmptyAnalyticsPage() + : const ActivityArchive(), ), redirect: loggedOutRedirect, routes: [ @@ -610,9 +612,12 @@ abstract class AppRoutes { roomId: state.pathParameters['roomid']!, eventId: state.uri.queryParameters['event'], backButton: BackButton( - onPressed: () => context.go( - "/rooms/analytics/activities", - ), + onPressed: () { + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.activities, + ); + }, ), ), ), @@ -625,11 +630,9 @@ abstract class AppRoutes { pageBuilder: (context, state) => defaultPageBuilder( context, state, - AnalyticsPage( - indicator: FluffyThemes.isColumnMode(context) - ? null - : ProgressIndicatorEnum.level, - ), + FluffyThemes.isColumnMode(context) + ? const EmptyAnalyticsPage() + : const LevelAnalyticsDetailsContent(), ), redirect: loggedOutRedirect, ), diff --git a/lib/l10n/intl_ar.arb b/lib/l10n/intl_ar.arb index dcc628179..3574b05a0 100644 --- a/lib/l10n/intl_ar.arb +++ b/lib/l10n/intl_ar.arb @@ -4358,9 +4358,6 @@ "courseSavedSuccessfully": "تم حفظ الدورة بنجاح", "addCoursePlan": "إضافة خطة دورة", "activityStatsButtonInstruction": "انقر هنا لعرض إحصائيات نشاطك ولإغلاق النشاط عند الانتهاء", - "readingAnalyticsDesc": "انقر على الممارسة على كل رسالة لتمارين القراءة.", - "speakingAnalyticsDesc": "سجل رسائل صوتية لممارسة التحدث.", - "audioAnalyticsDesc": "انقر على الممارسة على كل رسالة لتمارين الاستماع.", "loginToAccount": "تسجيل الدخول إلى حسابي", "appDescription": "تعلم لغة\nأثناء مراسلة أصدقائك.", "languages": "اللغات", @@ -4386,7 +4383,6 @@ "usernameOrEmail": "اسم المستخدم أو البريد الإلكتروني", "email": "البريد الإلكتروني", "forgotPassword": "هل نسيت كلمة المرور؟", - "writingAnalyticsDesc": "أرسل رسائل لممارسة الكتابة.", "endActivity": "إنهاء النشاط", "allLanguages": "جميع اللغات", "chatListTooltip": "ستجد هنا رسائلك المباشرة! انقر على صورة أي مستخدم وابدأ محادثة لإرسال رسالة خاصة.", @@ -9306,18 +9302,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9418,10 +9402,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10943,4 +10923,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index 3758e403a..becb320ee 100644 --- a/lib/l10n/intl_be.arb +++ b/lib/l10n/intl_be.arb @@ -1874,9 +1874,6 @@ "courseSavedSuccessfully": "Курс паспяхова захаваны", "addCoursePlan": "Дадаць план курса", "activityStatsButtonInstruction": "Націсніце тут, каб праглядаць статыстыку вашай дзейнасці і закрыць дзейнасць пасля завяршэння", - "readingAnalyticsDesc": "Націсніце практыкаванне на кожным паведамленні для практыкаванняў чытання.", - "speakingAnalyticsDesc": "Запісвайце галасавыя паведамленні для практыкаванняў маўлення.", - "audioAnalyticsDesc": "Націсніце практыкаванне на кожным паведамленні для практыкаванняў слухання.", "loginToAccount": "Увайсці ў мой рахунак", "appDescription": "Вучыце мову\nпраз адпраўку тэкставых паведамленняў сябрам.", "languages": "Мовы", @@ -1902,7 +1899,6 @@ "usernameOrEmail": "Імя карыстальніка або электронная пошта", "email": "Электронная пошта", "forgotPassword": "Забылі пароль?", - "writingAnalyticsDesc": "Адпраўляйце паведамленні для практыкі пісьма.", "endActivity": "Завяршыць дзейнасць", "allLanguages": "Усе мовы", "chatListTooltip": "Тут вы знойдзеце свае прамыя паведамленні! Націсніце на аватар любога карыстальніка і абярыце «пачаць размову», каб адправіць ДМ.", @@ -10188,18 +10184,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10300,10 +10284,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11825,4 +11805,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_bn.arb b/lib/l10n/intl_bn.arb index b7abdd146..98741a1c7 100644 --- a/lib/l10n/intl_bn.arb +++ b/lib/l10n/intl_bn.arb @@ -4465,9 +4465,6 @@ "courseSavedSuccessfully": "কোর্স সফলভাবে সংরক্ষিত হয়েছে", "addCoursePlan": "একটি কোর্স পরিকল্পনা যোগ করুন", "activityStatsButtonInstruction": "আপনার কার্যকলাপ পরিসংখ্যান দেখার জন্য এখানে ক্লিক করুন এবং শেষ হলে কার্যকলাপ বন্ধ করুন", - "readingAnalyticsDesc": "পাঠের জন্য প্রতিটি বার্তায় অনুশীলনে ক্লিক করুন।", - "speakingAnalyticsDesc": "বক্তব্য অনুশীলনের জন্য ভয়েস বার্তা রেকর্ড করুন।", - "audioAnalyticsDesc": "শোনার কার্যকলাপের জন্য প্রতিটি বার্তায় অনুশীলনে ক্লিক করুন।", "loginToAccount": "আমার অ্যাকাউন্টে লগইন করুন", "appDescription": "একটি ভাষা শিখুন\nআপনার বন্ধুদের সাথে মেসেজিং করার সময়।", "languages": "ভাষাসমূহ", @@ -4493,7 +4490,6 @@ "usernameOrEmail": "ব্যবহারকার নাম বা ইমেইল", "email": "ইমেইল", "forgotPassword": "পাসওয়ার্ড ভুলে গেছেন?", - "writingAnalyticsDesc": "লিখতে অনুশীলনের জন্য বার্তা পাঠান।", "endActivity": "ক্রিয়াকলাপ শেষ করুন", "allLanguages": "সব ভাষা", "chatListTooltip": "এখানে আপনি আপনার সরাসরি বার্তা খুঁজে পাবেন! যেকোনো ব্যবহারকারীর অবতার ক্লিক করুন এবং “আলাপ শুরু করুন” ক্লিক করে একটি ডিএম পাঠান।", @@ -10193,18 +10189,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10305,10 +10289,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11830,4 +11810,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_bo.arb b/lib/l10n/intl_bo.arb index e283c6ef5..87ae1661f 100644 --- a/lib/l10n/intl_bo.arb +++ b/lib/l10n/intl_bo.arb @@ -4269,9 +4269,6 @@ "courseSavedSuccessfully": "ཚོགས་ཚོགས་བརྗོད་སྤྱོད་འབད་ཡོད།", "addCoursePlan": "ཚོགས་ཚོགས་རིམ་ལོག", "activityStatsButtonInstruction": "འདིར་ཤེས་བརྗོད་གནང་བ་དང་ཚོད་ལྟ་ལས་འགོ་བཙུགས་བྱེད་སློབ་ཚན་ལ་བརྗེ་བཅོས་འབད།", - "readingAnalyticsDesc": "ཚོད་ལྟ་ལས་འགོ་བཙུགས་ལ་ལས་སྒྲིག་ལག་ལེན་གྱི་ཚོད་ལྟ་ལས་འགོ་བཙུགས་ལ་སྤྱོད་སྒོམ།", - "speakingAnalyticsDesc": "སྐད་ཆ་སྒྲིག་ལག་ལེན་གྱི་སྒྲིག་ལག་ལ་ལས་སྒྲིག་ལག་ལེན་གྱི་སྤྱོད་སྒོམ།", - "audioAnalyticsDesc": "ཚོད་ལྟ་ལས་འགོ་བཙུགས་ལ་ལས་སྒྲིག་ལག་ལེན་གྱི་ཚོད་ལྟ་ལས་འགོ་བཙུགས་ལ་སྤྱོད་སྒོམ།", "loginToAccount": "ངའི་ཁུལ་གཅིག་ལ་སྤྱོད་ལམ་སྤྱོད་འབད།", "appDescription": "ཚོགས་ཚོགས་སྐད་ཡིག་སློབ་ཚན་ལས་སྤྱོད་སྒོམ།\nཁྱེད་ཀྱི་གྲོགས་མཚན་ལ་རྟག་པ་སྤྱོད་སྒོམ་ལས་སྤྱོད་སྒོམ།", "languages": "ཚོད་ལྟ", @@ -9436,18 +9433,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10028,7 +10013,6 @@ "downloadCSVFile": "CSV ཡིག་ཚགས་འགྱོ་བཅོས་", "promotionalSubscriptionDesc": "ཁྱེད་ཀྱིས་ད་ལྟ་ལ་ལོ་རྒྱལ་ཁབ་ལ་ལོག་འབད་ཡོད་པའི་སྤྱི་ཚེས་ལ་ལོག་འབད་ཡོད། ཁྱེད་ཀྱིས་འབྲེལ་བ་བྱེད་ལས་སྤྱོད་ལེན་ལ་བསྐུར་གནང་བའི་ལས་ཁེར་ལ་འདེམས་སོ།", "originalSubscriptionPlatform": "ལོག་འབད་ཚུལ་ཁང་ {purchasePlatform} ལས་འབྲེལ་བ་བྱེད་ཡོད།", - "writingAnalyticsDesc": "ສົ່ງຂໍ້ຄວາມເພື່ອຝຶກຝนການຂຽນ", "endActivity": "ສິ້ນສຸດກິດຈະກຳ", "allLanguages": "ທັງຫມົດພາສາ", "chatListTooltip": "ນີ້ແມ່ນລາຍການຂອງຂໍ້ຄວາມຕົວສະເຫຼີມ! ໃຫ້ກົດທຸກຜູ້ໃຊ້ທີ່ມີຮູບພາບແລະ “ເລີ່ມການສົນທະນາ”ເພື່ອສົ່ງຂໍ້ຄວາມ DM.", @@ -10220,10 +10204,6 @@ } } }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10480,4 +10460,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb index 856356319..13025897f 100644 --- a/lib/l10n/intl_ca.arb +++ b/lib/l10n/intl_ca.arb @@ -4444,9 +4444,6 @@ "courseSavedSuccessfully": "Curs desat amb èxit", "addCoursePlan": "Afegeix un pla de curs", "activityStatsButtonInstruction": "Fes clic aquí per veure les teves estadístiques d'activitat i per tancar l'activitat quan hagis acabat", - "readingAnalyticsDesc": "Fes clic a practicar en cada missatge per a activitats de lectura.", - "speakingAnalyticsDesc": "Grava missatges de veu per a pràctica d'expressió oral.", - "audioAnalyticsDesc": "Fes clic a practicar en cada missatge per a activitats d'escolta.", "loginToAccount": "Inicia sessió al meu compte", "appDescription": "Aprèn un idioma\nmentre xatejes amb els teus amics.", "languages": "Idiomes", @@ -4472,7 +4469,6 @@ "usernameOrEmail": "Nom d'usuari o correu electrònic", "email": "Correu electrònic", "forgotPassword": "Has oblidat la contrasenya?", - "writingAnalyticsDesc": "Envia missatges per practicar l'escriptura.", "endActivity": "Finalitzar l'activitat", "allLanguages": "Tots els idiomes", "chatListTooltip": "Aquí trobaràs els teus missatges directes! Fes clic a la icona d'un usuari i “Inicia una conversa” per enviar un missatge privat.", @@ -9113,18 +9109,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9225,10 +9209,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10750,4 +10730,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index ba3ac69d4..858e5a86b 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -4001,9 +4001,6 @@ "courseSavedSuccessfully": "Kurz úspěšně uložen", "addCoursePlan": "Přidat plán kurzu", "activityStatsButtonInstruction": "Klikněte zde pro zobrazení statistik vaší aktivity a pro uzavření aktivity po dokončení", - "readingAnalyticsDesc": "Klikněte na cvičení u každé zprávy pro aktivity čtení.", - "speakingAnalyticsDesc": "Nahrajte hlasové zprávy pro procvičování mluvení.", - "audioAnalyticsDesc": "Klikněte na cvičení u každé zprávy pro poslechové aktivity.", "loginToAccount": "Přihlásit se ke svému účtu", "appDescription": "Učte se jazyk\npři psaní zpráv přátelům.", "languages": "Jazyky", @@ -4029,7 +4026,6 @@ "usernameOrEmail": "Uživatelské jméno nebo e-mail", "email": "E-mail", "forgotPassword": "Zapomněli jste heslo?", - "writingAnalyticsDesc": "Posílejte zprávy pro procvičování psaní.", "endActivity": "Ukončit aktivitu", "allLanguages": "Všechny jazyky", "chatListTooltip": "Zde najdete své přímé zprávy! Klikněte na avatar jakéhokoliv uživatele a “začněte konverzaci” pro odeslání DM.", @@ -9696,18 +9692,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9808,10 +9792,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11333,4 +11313,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_da.arb b/lib/l10n/intl_da.arb index 252980ab9..ae2ce71b1 100644 --- a/lib/l10n/intl_da.arb +++ b/lib/l10n/intl_da.arb @@ -1893,9 +1893,6 @@ "courseSavedSuccessfully": "Kursus gemt med succes", "addCoursePlan": "Tilføj en kursusplan", "activityStatsButtonInstruction": "Klik her for at se dine aktivitetsstatistikker og for at lukke aktiviteten, når du er færdig", - "readingAnalyticsDesc": "Klik på øvelse på hver besked for læseaktiviteter.", - "speakingAnalyticsDesc": "Optag stemmemeddelelser til taletræning.", - "audioAnalyticsDesc": "Klik på øvelse på hver besked for lytteaktiviteter.", "loginToAccount": "Log ind på min konto", "appDescription": "Lær et sprog\nmens du sender beskeder til dine venner.", "languages": "Sprog", @@ -1921,7 +1918,6 @@ "usernameOrEmail": "Brugernavn eller e-mail", "email": "E-mail", "forgotPassword": "Glemt adgangskode?", - "writingAnalyticsDesc": "Send beskeder for at øve skrivning.", "endActivity": "Afslut aktivitet", "allLanguages": "Alle sprog", "chatListTooltip": "Her finder du dine direkte beskeder! Klik på en brugers avatar og “start samtale” for at sende en DM.", @@ -10151,18 +10147,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10263,10 +10247,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11787,4 +11767,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 61715eeed..e90bd926d 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -4479,9 +4479,6 @@ "courseSavedSuccessfully": "Kurs erfolgreich gespeichert", "addCoursePlan": "Einen Kursplan hinzufügen", "activityStatsButtonInstruction": "Klicken Sie hier, um Ihre Aktivitätsstatistiken anzuzeigen und die Aktivität bei Abschluss zu schließen", - "readingAnalyticsDesc": "Klicken Sie auf Übung bei jeder Nachricht für Leseaktivitäten.", - "speakingAnalyticsDesc": "Aufnahmen von Sprachnachrichten für Sprechübungen machen.", - "audioAnalyticsDesc": "Klicken Sie auf Übung bei jeder Nachricht für Höraktivitäten.", "loginToAccount": "In mein Konto einloggen", "appDescription": "Lerne eine Sprache\nwährend du deinen Freunden schreibst.", "languages": "Sprachen", @@ -4507,7 +4504,6 @@ "usernameOrEmail": "Benutzername oder E-Mail", "email": "E-Mail", "forgotPassword": "Passwort vergessen?", - "writingAnalyticsDesc": "Senden Sie Nachrichten, um das Schreiben zu üben.", "endActivity": "Aktivität beenden", "allLanguages": "Alle Sprachen", "chatListTooltip": "Hier finden Sie Ihre Direktnachrichten! Klicken Sie auf das Avatar eines Nutzers und “Unterhaltung starten”, um eine DM zu senden.", @@ -9096,18 +9092,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9208,10 +9192,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10733,4 +10713,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_el.arb b/lib/l10n/intl_el.arb index b9f3278f3..4d780fae1 100644 --- a/lib/l10n/intl_el.arb +++ b/lib/l10n/intl_el.arb @@ -4419,9 +4419,6 @@ "courseSavedSuccessfully": "Το μάθημα αποθηκεύτηκε με επιτυχία", "addCoursePlan": "Προσθήκη σχεδίου μαθήματος", "activityStatsButtonInstruction": "Κάντε κλικ εδώ για να δείτε τα στατιστικά της δραστηριότητάς σας και να κλείσετε τη δραστηριότητα όταν τελειώσετε", - "readingAnalyticsDesc": "Κάντε κλικ στην πρακτική σε κάθε μήνυμα για δραστηριότητες ανάγνωσης.", - "speakingAnalyticsDesc": "Καταγράψτε φωνητικά μηνύματα για πρακτική ομιλίας.", - "audioAnalyticsDesc": "Κάντε κλικ στην πρακτική σε κάθε μήνυμα για δραστηριότητες ακρόασης.", "loginToAccount": "Συνδεθείτε στον λογαριασμό μου", "appDescription": "Μάθε μια γλώσσα\nενώ στέλνεις μηνύματα στους φίλους σου.", "languages": "Γλώσσες", @@ -4447,7 +4444,6 @@ "usernameOrEmail": "Όνομα χρήστη ή email", "email": "Email", "forgotPassword": "Ξεχάσατε τον κωδικό;", - "writingAnalyticsDesc": "Αποστέλλετε μηνύματα για να εξασκηθείτε στη γραφή.", "endActivity": "Τέλος δραστηριότητας", "allLanguages": "Όλες οι γλώσσες", "chatListTooltip": "Εδώ θα βρείτε τα άμεσα μηνύματά σας! Κάντε κλικ σε οποιονδήποτε avatar χρήστη και \"ξεκινήστε συνομιλία\" για να στείλετε ένα DM.", @@ -10147,18 +10143,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10259,10 +10243,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11784,4 +11764,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 5b76fa0ac..fbadeee73 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -4657,9 +4657,6 @@ "courseSavedSuccessfully": "Course saved successfully", "addCoursePlan": "Add a course plan", "activityStatsButtonInstruction": "Click here to view your activity stats and to close the activity when finished", - "readingAnalyticsDesc": "Click practice on each message for reading activities.", - "speakingAnalyticsDesc": "Record voice messages for speaking practice.", - "audioAnalyticsDesc": "Click practice on each message for listening activities.", "loginToAccount": "Login to my account", "appDescription": "Learn a language\nwhile texting your friends.", "languages": "Languages", @@ -4676,7 +4673,6 @@ "usernameOrEmail": "Username or email", "email": "Email", "forgotPassword": "Forgot password?", - "writingAnalyticsDesc": "Send messages to practice writing.", "endActivity": "End activity", "allLanguages": "All languages", "directMessageBotTitle": "Direct message Pangea Bot", diff --git a/lib/l10n/intl_eo.arb b/lib/l10n/intl_eo.arb index f34a559bd..ec445a7b9 100644 --- a/lib/l10n/intl_eo.arb +++ b/lib/l10n/intl_eo.arb @@ -3598,9 +3598,6 @@ "courseSavedSuccessfully": "Kurso sukcese konservita", "addCoursePlan": "Aldoni kurso-planon", "activityStatsButtonInstruction": "Klaku ĉi tie por vidi viajn aktivadstatistikojn kaj por fermi la aktivadon kiam vi finos", - "readingAnalyticsDesc": "Klaku praktiki ĉe ĉiu mesaĝo por legaj aktivecoj.", - "speakingAnalyticsDesc": "Registru voĉmesaĝojn por parolpractiko.", - "audioAnalyticsDesc": "Klaku praktiki ĉe ĉiu mesaĝo por aŭskultaj aktivecoj.", "loginToAccount": "Ensaluti al mia konto", "appDescription": "Lernu lingvon\ndum tekstdonado al viaj amikojn.", "languages": "Lingvoj", @@ -3626,7 +3623,6 @@ "usernameOrEmail": "Uzantnomo aŭ retpoŝto", "email": "Retpoŝto", "forgotPassword": "Ĉu vi forgesis la pasvorton?", - "writingAnalyticsDesc": "Sendu mesaĝojn por praktiki skribadon.", "endActivity": "Fini aktivecon", "allLanguages": "Ĉiuj lingvoj", "chatListTooltip": "Ĉi tie vi trovos viajn rektajn mesaĝojn! Klaku sur ajna uzantoprofilo kaj “komencu konversacion” por sendi DM.", @@ -10178,18 +10174,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10290,10 +10274,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11815,4 +11795,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 376fd8d1e..1f5ebf544 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -5747,9 +5747,6 @@ "courseSavedSuccessfully": "Curso guardado con éxito", "addCoursePlan": "Agregar un plan de curso", "activityStatsButtonInstruction": "Haz clic aquí para ver tus estadísticas de actividad y cerrar la actividad cuando termines", - "readingAnalyticsDesc": "Haz clic en practicar en cada mensaje para actividades de lectura.", - "speakingAnalyticsDesc": "Graba mensajes de voz para practicar speaking.", - "audioAnalyticsDesc": "Haz clic en practicar en cada mensaje para actividades de listening.", "loginToAccount": "Iniciar sesión en mi cuenta", "appDescription": "Aprende un idioma\nmientras envías mensajes a tus amigos.", "languages": "Idiomas", @@ -5775,7 +5772,6 @@ "usernameOrEmail": "Nombre de usuario o correo electrónico", "email": "Correo electrónico", "forgotPassword": "¿Olvidaste tu contraseña?", - "writingAnalyticsDesc": "Envía mensajes para practicar la escritura.", "endActivity": "Finalizar actividad", "allLanguages": "Todos los idiomas", "chatListTooltip": "¡Aquí encontrarás tus mensajes directos! Haz clic en el avatar de cualquier usuario y \"iniciar conversación\" para enviar un mensaje directo.", @@ -6292,18 +6288,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -6404,10 +6388,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -7960,4 +7940,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb index 3b0d0d31a..1a0972d8d 100644 --- a/lib/l10n/intl_et.arb +++ b/lib/l10n/intl_et.arb @@ -8873,9 +8873,6 @@ "courseSavedSuccessfully": "Kursus salvestati edukalt", "addCoursePlan": "Lisa kursuseplaan", "activityStatsButtonInstruction": "Klõpsa siia, et vaadata oma tegevuse statistikat ja sulgeda tegevus pärast lõpetamist", - "readingAnalyticsDesc": "Klõpsa iga sõnumi peal, et teha lugemisharjutusi.", - "speakingAnalyticsDesc": "Salvesta häälteateid rääkimisharjutuste jaoks.", - "audioAnalyticsDesc": "Klõpsa iga sõnumi peal, et teha kuulamisülesandeid.", "loginToAccount": "Logi sisse oma kontole", "appDescription": "Õpi keelt\nsõpradega sõnumite saatmise ajal.", "languages": "Keeled", @@ -8901,7 +8898,6 @@ "usernameOrEmail": "Kasutajanimi või e-post", "email": "E-post", "forgotPassword": "Unustasid parooli?", - "writingAnalyticsDesc": "Saada sõnumeid kirjutamise harjutamiseks.", "endActivity": "Lõpeta tegevus", "allLanguages": "Kõik keeled", "chatListTooltip": "Siin leiad oma otsevestlused! Klõpsa mis tahes kasutaja avataril ja vali „Alusta vestlust“, et saata otsevestlus.", @@ -9355,18 +9351,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9467,10 +9451,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10997,4 +10977,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_eu.arb b/lib/l10n/intl_eu.arb index a2370eccd..1088e98eb 100644 --- a/lib/l10n/intl_eu.arb +++ b/lib/l10n/intl_eu.arb @@ -4472,9 +4472,6 @@ "courseSavedSuccessfully": "Ikastaroa arrakastaz gorde da", "addCoursePlan": "Gehitu ikastaro plan bat", "activityStatsButtonInstruction": "Klikatu hemen zure jarduera estatistikak ikusteko eta jarduera amaitzean ixteko", - "readingAnalyticsDesc": "Klikatu praktika bakoitzean irakurketa jarduerak egiteko.", - "speakingAnalyticsDesc": "Grabatu ahots mezuak mintzatzeko praktika egiteko.", - "audioAnalyticsDesc": "Klikatu praktika bakoitzean entzute jarduerak egiteko.", "loginToAccount": "Hasi saioa nire kontuan", "appDescription": "Ikasi hizkuntza\nzure lagunekin mezularitza egiten bitartean.", "languages": "Hizkuntzak", @@ -4500,7 +4497,6 @@ "usernameOrEmail": "Erabiltzaile-izena edo emaila", "email": "Emaila", "forgotPassword": "Aizu galdu?", - "writingAnalyticsDesc": "Bidali mezuak idazketa praktikatzen laguntzeko.", "endActivity": "Amaitu jarduera", "allLanguages": "Hizkuntza guztiak", "chatListTooltip": "Hemen zure mezu zuzenean aurkituko dituzu! Sakatu edozein erabiltzailearen avatarra eta “hasi elkarrizketa” mezu zuzena bidaltzeko.", @@ -9089,18 +9085,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9201,10 +9185,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10726,4 +10706,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_fa.arb b/lib/l10n/intl_fa.arb index 0899d59c3..7c8d0e3fd 100644 --- a/lib/l10n/intl_fa.arb +++ b/lib/l10n/intl_fa.arb @@ -3892,9 +3892,6 @@ "courseSavedSuccessfully": "دوره با موفقیت ذخیره شد", "addCoursePlan": "افزودن برنامه دوره", "activityStatsButtonInstruction": "برای مشاهده آمار فعالیت خود و بستن فعالیت پس از اتمام اینجا کلیک کنید", - "readingAnalyticsDesc": "برای فعالیت‌های خواندن، روی هر پیام تمرین کنید.", - "speakingAnalyticsDesc": "برای تمرین صحبت، پیام‌های صوتی ضبط کنید.", - "audioAnalyticsDesc": "برای فعالیت‌های شنیداری، روی هر پیام تمرین کنید.", "loginToAccount": "وارد حساب کاربری من شوید", "appDescription": "یادگیری زبان\nدر حین پیام‌رسانی به دوستانتان.", "languages": "زبان‌ها", @@ -3920,7 +3917,6 @@ "usernameOrEmail": "نام کاربری یا ایمیل", "email": "ایمیل", "forgotPassword": "رمز عبور را فراموش کرده‌اید؟", - "writingAnalyticsDesc": "برای تمرین نوشتن پیام ارسال کنید.", "endActivity": "پایان فعالیت", "allLanguages": "همه زبان‌ها", "chatListTooltip": "در اینجا پیام‌های مستقیم خود را پیدا خواهید کرد! روی آواتار هر کاربر کلیک کنید و «شروع مکالمه» را بزنید تا پیام مستقیم ارسال کنید.", @@ -9821,18 +9817,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9933,10 +9917,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11458,4 +11438,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_fi.arb b/lib/l10n/intl_fi.arb index a517980a1..9e44d69cf 100644 --- a/lib/l10n/intl_fi.arb +++ b/lib/l10n/intl_fi.arb @@ -3972,9 +3972,6 @@ "courseSavedSuccessfully": "Kurssi tallennettu onnistuneesti", "addCoursePlan": "Lisää kurssisuunnitelma", "activityStatsButtonInstruction": "Klikkaa tästä nähdäksesi aktiviteettitilastosi ja sulkeaksesi aktiviteetin lopuksi", - "readingAnalyticsDesc": "Klikkaa harjoitusta jokaisessa viestissä lukuharjoituksia varten.", - "speakingAnalyticsDesc": "Tallenna ääniviestejä puheharjoituksia varten.", - "audioAnalyticsDesc": "Klikkaa harjoitusta jokaisessa viestissä kuunteluharjoituksia varten.", "loginToAccount": "Kirjaudu tililleni", "appDescription": "Opiskele kieltä\nlähettämällä viestejä ystävillesi.", "languages": "Kielet", @@ -4000,7 +3997,6 @@ "usernameOrEmail": "Käyttäjätunnus tai sähköposti", "email": "Sähköposti", "forgotPassword": "Unohditko salasanan?", - "writingAnalyticsDesc": "Lähetä viestejä harjoitellaksesi kirjoittamista.", "endActivity": "Lopeta toiminta", "allLanguages": "Kaikki kielet", "chatListTooltip": "Täältä löydät yksityisviestisi! Klikkaa minkä tahansa käyttäjän avataria ja \"aloita keskustelu\" lähettääksesi yksityisviestin.", @@ -9712,18 +9708,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9824,10 +9808,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11349,4 +11329,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_fil.arb b/lib/l10n/intl_fil.arb index b14913c37..600c487f5 100644 --- a/lib/l10n/intl_fil.arb +++ b/lib/l10n/intl_fil.arb @@ -2737,9 +2737,6 @@ "courseSavedSuccessfully": "Matagumpay na na-save ang kurso", "addCoursePlan": "Magdagdag ng plano sa kurso", "activityStatsButtonInstruction": "Pindutin dito upang makita ang iyong mga istatistika ng aktibidad at isara ang aktibidad kapag tapos na", - "readingAnalyticsDesc": "Pindutin ang practice sa bawat mensahe para sa mga aktibidad sa pagbasa.", - "speakingAnalyticsDesc": "Mag-record ng mga voice message para sa pagsasanay sa pagsasalita.", - "audioAnalyticsDesc": "Pindutin ang practice sa bawat mensahe para sa mga aktibidad sa pakikinig.", "loginToAccount": "Mag-login sa aking account", "appDescription": "Matuto ng isang wika\nhabang nagte-text sa iyong mga kaibigan.", "languages": "Mga Wika", @@ -2765,7 +2762,6 @@ "usernameOrEmail": "Username o email", "email": "Email", "forgotPassword": "Nakalimutan ang password?", - "writingAnalyticsDesc": "Magpadala ng mga mensahe upang sanayin ang pagsusulat.", "endActivity": "Tapusin ang aktibidad", "allLanguages": "Lahat ng wika", "chatListTooltip": "Dito mo makikita ang iyong mga direktang mensahe! I-click ang avatar ng kahit anong user at “simulan ang pag-uusap” upang magpadala ng DM.", @@ -10078,18 +10074,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10190,10 +10174,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11702,4 +11682,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index e06ad1caa..ff02ee618 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -4302,9 +4302,6 @@ "courseSavedSuccessfully": "Cours enregistré avec succès", "addCoursePlan": "Ajouter un plan de cours", "activityStatsButtonInstruction": "Cliquez ici pour voir vos statistiques d'activité et pour fermer l'activité une fois terminée", - "readingAnalyticsDesc": "Cliquez sur pratiquer sur chaque message pour les activités de lecture.", - "speakingAnalyticsDesc": "Enregistrez des messages vocaux pour la pratique de la parole.", - "audioAnalyticsDesc": "Cliquez sur pratiquer sur chaque message pour les activités d'écoute.", "loginToAccount": "Se connecter à mon compte", "appDescription": "Apprenez une langue\ntout en envoyant des messages à vos amis.", "languages": "Langues", @@ -4330,7 +4327,6 @@ "usernameOrEmail": "Nom d'utilisateur ou email", "email": "Email", "forgotPassword": "Mot de passe oublié ?", - "writingAnalyticsDesc": "Envoyez des messages pour pratiquer l'écriture.", "endActivity": "Terminer l'activité", "allLanguages": "Toutes les langues", "chatListTooltip": "Ici, vous trouverez vos messages directs ! Cliquez sur l'avatar d'un utilisateur et « démarrer une conversation » pour envoyer un message privé.", @@ -9413,18 +9409,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9525,10 +9509,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11050,4 +11030,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index 0c509cdcc..b3c67b580 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -4480,9 +4480,6 @@ "courseSavedSuccessfully": "Sábháladh an cúrsa go rathúil", "addCoursePlan": "Cuir plean cúrsa leis", "activityStatsButtonInstruction": "Cliceáil anseo chun do staitisticí gníomhaíochta a fheiceáil agus an gníomhaíocht a dhúnadh nuair a bheidh sé críochnaithe", - "readingAnalyticsDesc": "Cliceáil cleachtadh ar gach teachtaireacht le haghaidh gníomhaíochtaí léitheoireachta.", - "speakingAnalyticsDesc": "Cláraigh teachtaireachtaí gutha le haghaidh cleachtadh labhartha.", - "audioAnalyticsDesc": "Cliceáil cleachtadh ar gach teachtaireacht le haghaidh gníomhaíochtaí éisteachta.", "loginToAccount": "Logáil isteach i mo chuntas", "appDescription": "Foghlaim teanga\nag an am céanna le do chairde.", "languages": "Teangacha", @@ -4508,7 +4505,6 @@ "usernameOrEmail": "Ainm úsáideora nó ríomhphost", "email": "Ríomhphost", "forgotPassword": "An bhfuil do phasfhocal dearmadta?", - "writingAnalyticsDesc": "Seol teachtaireachtaí chun cleachtadh scríbhneoireachta a dhéanamh.", "endActivity": "Críochnaigh an ghníomhaíocht", "allLanguages": "Gach teanga", "chatListTooltip": "Anseo gheobhaidh tú do theachtaireachtaí díreacha! Cliceáil ar avatar aon úsáideora agus “tosaigh comhrá” chun DM a sheoladh.", @@ -9087,18 +9083,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9199,10 +9183,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10724,4 +10704,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index 294b5bfbd..c634db9ae 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -4473,9 +4473,6 @@ "courseSavedSuccessfully": "Curso gardado con éxito", "addCoursePlan": "Engadir un plan de curso", "activityStatsButtonInstruction": "Faga clic aquí para ver as súas estatísticas de actividade e pechar a actividade cando remate", - "readingAnalyticsDesc": "Faga clic en practicar en cada mensaxe para actividades de lectura.", - "speakingAnalyticsDesc": "Grabe mensaxes de voz para practicar a fala.", - "audioAnalyticsDesc": "Faga clic en practicar en cada mensaxe para actividades de escoita.", "loginToAccount": "Inicia sesión na miña conta", "appDescription": "Aprende un idioma mentres envías mensaxes aos teus amigos.", "languages": "Idiomas", @@ -4501,7 +4498,6 @@ "usernameOrEmail": "Nome de usuario ou correo electrónico", "email": "Correo electrónico", "forgotPassword": "Esqueciches a contrasinal?", - "writingAnalyticsDesc": "Envía mensaxes para practicar a escritura.", "endActivity": "Rematar a actividade", "allLanguages": "Todas as linguas", "chatListTooltip": "Aquí atoparás as túas mensaxes directas! Fai clic na icona de calquera usuario e \"comeza unha conversa\" para enviar unha mensaxe privada.", @@ -9086,18 +9082,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9198,10 +9182,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10723,4 +10703,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_he.arb b/lib/l10n/intl_he.arb index df1960bf4..38d489294 100644 --- a/lib/l10n/intl_he.arb +++ b/lib/l10n/intl_he.arb @@ -3058,9 +3058,6 @@ "courseSavedSuccessfully": "הקורס נשמר בהצלחה", "addCoursePlan": "הוסף תכנית קורס", "activityStatsButtonInstruction": "לחץ כאן כדי לצפות בסטטיסטיקות הפעילות שלך ולסגור את הפעילות בסיום", - "readingAnalyticsDesc": "לחץ על תרגול בכל הודעה לפעילויות קריאה.", - "speakingAnalyticsDesc": "הקלט הודעות קוליות לתרגול דיבור.", - "audioAnalyticsDesc": "לחץ על תרגול בכל הודעה לפעילויות שמיעה.", "loginToAccount": "התחבר לחשבוני", "appDescription": "למד שפה\nבזמן שליחת הודעות לחברים שלך.", "languages": "שפות", @@ -3086,7 +3083,6 @@ "usernameOrEmail": "שם משתמש או אימייל", "email": "אימייל", "forgotPassword": "שכחת סיסמה?", - "writingAnalyticsDesc": "שלח הודעות לתרגול הכתיבה.", "endActivity": "סיים פעילות", "allLanguages": "כל השפות", "chatListTooltip": "כאן תמצאו את ההודעות הישירות שלכם! לחצו על אייקון של משתמש כלשהו ו״התחל שיחה״ כדי לשלוח הודעה פרטית.", @@ -10138,18 +10134,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10250,10 +10234,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11775,4 +11755,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_hi.arb b/lib/l10n/intl_hi.arb index 2e77b12ac..1e015c437 100644 --- a/lib/l10n/intl_hi.arb +++ b/lib/l10n/intl_hi.arb @@ -4446,9 +4446,6 @@ "courseSavedSuccessfully": "कोर्स सफलतापूर्वक सहेजा गया", "addCoursePlan": "कोर्स योजना जोड़ें", "activityStatsButtonInstruction": "यहां क्लिक करें अपनी गतिविधि आँकड़े देखने के लिए और समाप्त होने पर गतिविधि को बंद करने के लिए", - "readingAnalyticsDesc": "पढ़ने की गतिविधियों के लिए प्रत्येक संदेश पर अभ्यास पर क्लिक करें।", - "speakingAnalyticsDesc": "बोलने का अभ्यास करने के लिए आवाज़ संदेश रिकॉर्ड करें।", - "audioAnalyticsDesc": "सुनने की गतिविधियों के लिए प्रत्येक संदेश पर अभ्यास पर क्लिक करें।", "loginToAccount": "मेरे खाते में लॉगिन करें", "appDescription": "एक भाषा सीखें\nजब आप अपने दोस्तों को मैसेज कर रहे हों।", "languages": "भाषाएँ", @@ -4474,7 +4471,6 @@ "usernameOrEmail": "यूजरनेम या ईमेल", "email": "ईमेल", "forgotPassword": "पासवर्ड भूल गए?", - "writingAnalyticsDesc": "लेखन का अभ्यास करने के लिए संदेश भेजें।", "endActivity": "क्रिया समाप्त करें", "allLanguages": "सभी भाषाएँ", "chatListTooltip": "यहाँ आप अपने सीधे संदेश पाएंगे! किसी भी उपयोगकर्ता के अवतार पर क्लिक करें और “संवाद शुरू करें” पर क्लिक करें ताकि आप एक डीएम भेज सकें।", @@ -10174,18 +10170,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10286,10 +10270,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11811,4 +11791,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_hr.arb b/lib/l10n/intl_hr.arb index 67c8dec40..8536561c2 100644 --- a/lib/l10n/intl_hr.arb +++ b/lib/l10n/intl_hr.arb @@ -4228,9 +4228,6 @@ "courseSavedSuccessfully": "Tečaj je uspješno spremljen", "addCoursePlan": "Dodajte plan tečaja", "activityStatsButtonInstruction": "Kliknite ovdje za prikaz statistike vaše aktivnosti i zatvaranje aktivnosti nakon završetka", - "readingAnalyticsDesc": "Kliknite na vježbu na svakoj poruci za aktivnosti čitanja.", - "speakingAnalyticsDesc": "Snimate glasovne poruke za vježbu govora.", - "audioAnalyticsDesc": "Kliknite na vježbu na svakoj poruci za aktivnosti slušanja.", "loginToAccount": "Prijavite se na svoj račun", "appDescription": "Učite jezik\ndok šaljete poruke prijateljima.", "languages": "Jezici", @@ -4256,7 +4253,6 @@ "usernameOrEmail": "Korisničko ime ili e-mail", "email": "E-mail", "forgotPassword": "Zaboravili ste lozinku?", - "writingAnalyticsDesc": "Šaljite poruke za vježbanje pisanja.", "endActivity": "Završite aktivnost", "allLanguages": "Svi jezici", "chatListTooltip": "Ovdje ćete pronaći svoje izravne poruke! Kliknite na avatar bilo kojeg korisnika i “započni razgovor” za slanje DM-a.", @@ -9461,18 +9457,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9573,10 +9557,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11098,4 +11078,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb index b2e9262b6..15f07b7b7 100644 --- a/lib/l10n/intl_hu.arb +++ b/lib/l10n/intl_hu.arb @@ -4473,9 +4473,6 @@ "courseSavedSuccessfully": "Kurzus sikeresen mentve", "addCoursePlan": "Kurzus terv hozzáadása", "activityStatsButtonInstruction": "Kattintson ide az aktivitási statisztikák megtekintéséhez és a tevékenység bezárásához, ha befejezte", - "readingAnalyticsDesc": "Kattintson a gyakorlatra minden üzenetnél az olvasási tevékenységekhez.", - "speakingAnalyticsDesc": "Felvétel hangüzeneteket a beszédgyakorlatokhoz.", - "audioAnalyticsDesc": "Kattintson a gyakorlatra minden üzenetnél a hallgatási tevékenységekhez.", "loginToAccount": "Jelentkezzen be a fiókomba", "appDescription": "Tanulj egy nyelvet\nüzenetküldés közben a barátaidnak.", "languages": "Nyelvek", @@ -4501,7 +4498,6 @@ "usernameOrEmail": "Felhasználónév vagy e-mail", "email": "E-mail", "forgotPassword": "Elfelejtetted a jelszót?", - "writingAnalyticsDesc": "Üzenetek küldése a írás gyakorlásához.", "endActivity": "Tevékenység befejezése", "allLanguages": "Minden nyelv", "chatListTooltip": "Itt találod a közvetlen üzeneteidet! Kattints bármely felhasználó avatarjára, és válaszd a „beszélgetés indítása” lehetőséget, hogy üzenetet küldj.", @@ -9090,18 +9086,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9202,10 +9186,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10727,4 +10707,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ia.arb b/lib/l10n/intl_ia.arb index 2a011e9ec..d0e652b0d 100644 --- a/lib/l10n/intl_ia.arb +++ b/lib/l10n/intl_ia.arb @@ -1921,9 +1921,6 @@ "courseSavedSuccessfully": "Curso salvat con successo", "addCoursePlan": "Adder un plan de curso", "activityStatsButtonInstruction": "Clicca hic pro vider tu statisticas de actividad e pro clauder le actividad quando es finite", - "readingAnalyticsDesc": "Clicca 'practica' super cata message pro actividades de lectura.", - "speakingAnalyticsDesc": "Registrate messages de voce pro practica de parola.", - "audioAnalyticsDesc": "Clicca 'practica' super cata message pro actividades de ascolto.", "loginToAccount": "Intra in mi conto", "appDescription": "Impara un idioma\ndum il texta a tu amicos.", "languages": "Linguas", @@ -1949,7 +1946,6 @@ "usernameOrEmail": "Nomine de usator o email", "email": "Email", "forgotPassword": "Oblida le parola?", - "writingAnalyticsDesc": "Manda messages pro practicar le scriber.", "endActivity": "Terminar le activitate", "allLanguages": "Tote linguas", "chatListTooltip": "Ici tu trovara tu messages directe! Clicca super le avatar de qualcunque usator e 'comenciar conversation' pro inviar un DM.", @@ -10167,18 +10163,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10279,10 +10263,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11804,4 +11784,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_id.arb b/lib/l10n/intl_id.arb index c3bedd000..fdd3fc5f3 100644 --- a/lib/l10n/intl_id.arb +++ b/lib/l10n/intl_id.arb @@ -4474,9 +4474,6 @@ "courseSavedSuccessfully": "Kursus berhasil disimpan", "addCoursePlan": "Tambahkan rencana kursus", "activityStatsButtonInstruction": "Klik di sini untuk melihat statistik aktivitas Anda dan menutup aktivitas saat selesai", - "readingAnalyticsDesc": "Klik latihan pada setiap pesan untuk aktivitas membaca.", - "speakingAnalyticsDesc": "Rekam pesan suara untuk latihan berbicara.", - "audioAnalyticsDesc": "Klik latihan pada setiap pesan untuk aktivitas mendengarkan.", "loginToAccount": "Masuk ke akun saya", "appDescription": "Pelajari bahasa\nsambil mengirim pesan kepada teman.", "languages": "Bahasa", @@ -4502,7 +4499,6 @@ "usernameOrEmail": "Nama pengguna atau email", "email": "Email", "forgotPassword": "Lupa kata sandi?", - "writingAnalyticsDesc": "Kirim pesan untuk berlatih menulis.", "endActivity": "Akhiri aktivitas", "allLanguages": "Semua bahasa", "chatListTooltip": "Di sini Anda akan menemukan pesan langsung Anda! Klik avatar pengguna mana pun dan \"mulai percakapan\" untuk mengirim DM.", @@ -9080,18 +9076,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9192,10 +9176,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10717,4 +10697,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ie.arb b/lib/l10n/intl_ie.arb index ff6d3fa98..5d389da62 100644 --- a/lib/l10n/intl_ie.arb +++ b/lib/l10n/intl_ie.arb @@ -4335,9 +4335,6 @@ "courseSavedSuccessfully": "Cors salvat con success", "addCoursePlan": "Aggiungi un plan de cors", "activityStatsButtonInstruction": "Clika qua pro vider tuas statisticas de activitate e pro serrar l'activitate quando finit", - "readingAnalyticsDesc": "Clika praticar su cata message pro activitates de lectura.", - "speakingAnalyticsDesc": "Registrara messages de voce pro practicar de parlar.", - "audioAnalyticsDesc": "Clika praticar su cata message pro activitates de ascoltar.", "loginToAccount": "Login a mi conto", "appDescription": "Impara un linguage\ndurante scriver a tui amicos.", "languages": "Linguages", @@ -4363,7 +4360,6 @@ "usernameOrEmail": "Nom de usator o email", "email": "Email", "forgotPassword": "Oblidate la parola de pass?", - "writingAnalyticsDesc": "Manda messages pro practicar scriver.", "endActivity": "Finir l'activitate", "allLanguages": "Tutte le linguas", "chatListTooltip": "Qua tu trovarai to mesages directes! Clicca su qualunque avatar de usator e 'comencia conversation' pro mandar un DM.", @@ -10063,18 +10059,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10175,10 +10159,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11700,4 +11680,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 4f5e626e1..e3510f04b 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -4451,9 +4451,6 @@ "courseSavedSuccessfully": "Corso salvato con successo", "addCoursePlan": "Aggiungi un piano del corso", "activityStatsButtonInstruction": "Clicca qui per visualizzare le statistiche della tua attività e per chiudere l'attività quando hai finito", - "readingAnalyticsDesc": "Clicca su pratica su ogni messaggio per le attività di lettura.", - "speakingAnalyticsDesc": "Registra messaggi vocali per la pratica del parlato.", - "audioAnalyticsDesc": "Clicca su pratica su ogni messaggio per le attività di ascolto.", "loginToAccount": "Accedi al mio account", "appDescription": "Impara una lingua\nmentre scrivi ai tuoi amici.", "languages": "Lingue", @@ -4479,7 +4476,6 @@ "usernameOrEmail": "Nome utente o email", "email": "Email", "forgotPassword": "Hai dimenticato la password?", - "writingAnalyticsDesc": "Invia messaggi per esercitarti a scrivere.", "endActivity": "Termina attività", "allLanguages": "Tutte le lingue", "chatListTooltip": "Qui troverai i tuoi messaggi diretti! Clicca sull'avatar di qualsiasi utente e “inizia conversazione” per inviare un messaggio diretto.", @@ -9092,18 +9088,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9204,10 +9188,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10729,4 +10709,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index 933551a5c..6d3804b49 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -3815,9 +3815,6 @@ "courseSavedSuccessfully": "コースが正常に保存されました", "addCoursePlan": "コースプランを追加", "activityStatsButtonInstruction": "ここをクリックして活動統計を表示し、終了時に活動を閉じます", - "readingAnalyticsDesc": "各メッセージの練習をクリックして読解活動を行います。", - "speakingAnalyticsDesc": "話す練習のために音声メッセージを録音します。", - "audioAnalyticsDesc": "各メッセージの練習をクリックしてリスニング活動を行います。", "loginToAccount": "マイアカウントにログイン", "appDescription": "友達とメッセージを送りながら言語を学びましょう。", "languages": "言語", @@ -3843,7 +3840,6 @@ "usernameOrEmail": "ユーザー名またはメール", "email": "メール", "forgotPassword": "パスワードをお忘れですか?", - "writingAnalyticsDesc": "書き取り練習のためにメッセージを送信します。", "endActivity": "アクティビティを終了", "allLanguages": "すべての言語", "chatListTooltip": "ここにあなたのダイレクトメッセージがあります!任意のユーザーのアバターをクリックして「会話を開始」し、DMを送信してください。", @@ -9879,18 +9875,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9991,10 +9975,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11516,4 +11496,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ka.arb b/lib/l10n/intl_ka.arb index 92f63ee92..01ba6c529 100644 --- a/lib/l10n/intl_ka.arb +++ b/lib/l10n/intl_ka.arb @@ -2557,9 +2557,6 @@ "courseSavedSuccessfully": "კურსი წარმატებით შენახულია", "addCoursePlan": "კურსის გეგმის დამატება", "activityStatsButtonInstruction": "აწკაპუნეთ აქ თქვენი აქტივობის სტატისტიკის სანახავად და აქტივობის დახურვისთვის, როდესაც დასრულდება", - "readingAnalyticsDesc": "წაიკითხეთ პრაქტიკა თითოეულ შეტყობინებაზე, წაკითხვის აქტივობებისთვის.", - "speakingAnalyticsDesc": "ჩაწერეთ ხმოვანი შეტყობინებები საუბრის პრაქტიკისთვის.", - "audioAnalyticsDesc": "აწკაპუნეთ პრაქტიკა თითოეულ შეტყობინებაზე, მოსმენის აქტივობებისთვის.", "loginToAccount": "შესვლა ჩემს ანგარიშზე", "appDescription": "სწავლა ენის\nმეგობრებთან მესენჯერში საუბრის დროს.", "languages": "ენები", @@ -2585,7 +2582,6 @@ "usernameOrEmail": "მომხმარებლის სახელი ან ელფოსტა", "email": "ელფოსტა", "forgotPassword": "დაგავიწყდათ პაროლი?", - "writingAnalyticsDesc": "გაგზავნეთ შეტყობინებები წერის პრაქტიკისთვის.", "endActivity": "ფართოება აქტივობა", "allLanguages": "ყველა ენა", "chatListTooltip": "აქ ნახავთ თქვენს პირდაპირ შეტყობინებებს! დაწკაპეთ ნებისმიერი მომხმარებლის ავატარი და „საუბრის დაწყება“, რათა გაგზავნოთ შეტყობინება.", @@ -10119,18 +10115,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10231,10 +10215,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11756,4 +11736,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ko.arb b/lib/l10n/intl_ko.arb index dd5512a72..b82680e8a 100644 --- a/lib/l10n/intl_ko.arb +++ b/lib/l10n/intl_ko.arb @@ -4408,9 +4408,6 @@ "courseSavedSuccessfully": "강좌가 성공적으로 저장되었습니다", "addCoursePlan": "강좌 계획 추가", "activityStatsButtonInstruction": "여기를 클릭하여 활동 통계를 보고 완료 시 활동을 종료하세요", - "readingAnalyticsDesc": "읽기 활동을 위해 각 메시지에서 연습을 클릭하세요.", - "speakingAnalyticsDesc": "말하기 연습을 위해 음성 메시지를 녹음하세요.", - "audioAnalyticsDesc": "듣기 활동을 위해 각 메시지에서 연습을 클릭하세요.", "loginToAccount": "내 계정에 로그인", "appDescription": "친구들과 문자 메시지를 보내며 언어를 배우세요.", "languages": "언어", @@ -4436,7 +4433,6 @@ "usernameOrEmail": "사용자 이름 또는 이메일", "email": "이메일", "forgotPassword": "비밀번호를 잊으셨나요?", - "writingAnalyticsDesc": "글쓰기를 연습하려면 메시지를 보내세요.", "endActivity": "활동 종료", "allLanguages": "모든 언어", "chatListTooltip": "여기서 직접 메시지를 찾을 수 있습니다! 사용자 아바타를 클릭하고 “대화 시작”을 선택하여 DM을 보내세요.", @@ -9197,18 +9193,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9309,10 +9293,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10834,4 +10814,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_lt.arb b/lib/l10n/intl_lt.arb index 72de5c2b2..75b57b5b7 100644 --- a/lib/l10n/intl_lt.arb +++ b/lib/l10n/intl_lt.arb @@ -3824,9 +3824,6 @@ "courseSavedSuccessfully": "Kursas sėkmingai išsaugotas", "addCoursePlan": "Pridėti kurso planą", "activityStatsButtonInstruction": "Spustelėkite čia, norėdami peržiūrėti savo veiklos statistiką ir uždaryti veiklą, kai baigsite", - "readingAnalyticsDesc": "Spustelėkite praktika ant kiekvienos žinutės skaitymo veikloms.", - "speakingAnalyticsDesc": "Įrašykite balso žinutes kalbėjimo praktikai.", - "audioAnalyticsDesc": "Spustelėkite praktika ant kiekvienos žinutės klausymo veikloms.", "loginToAccount": "Prisijungti prie mano paskyros", "appDescription": "Išmokite kalbą\nnaudodamiesi tekstais su draugais.", "languages": "Kalbos", @@ -3852,7 +3849,6 @@ "usernameOrEmail": "Vartotojo vardas arba el. paštas", "email": "El. paštas", "forgotPassword": "Pamiršote slaptažodį?", - "writingAnalyticsDesc": "Siųskite žinutes praktikuodami rašymą.", "endActivity": "Baigti veiklą", "allLanguages": "Visos kalbos", "chatListTooltip": "Čia rasite savo tiesiogines žinutes! Spustelėkite bet kurio vartotojo avatarą ir „pradėti pokalbį“, kad išsiųstumėte tiesioginę žinutę.", @@ -9894,18 +9890,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10006,10 +9990,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11531,4 +11511,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index 395caa393..b8ee20c7e 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -4445,9 +4445,6 @@ "courseSavedSuccessfully": "Kursu veiksmīgi saglabāts", "addCoursePlan": "Pievienot kursa plānu", "activityStatsButtonInstruction": "Noklikšķiniet šeit, lai skatītu savu aktivitātes statistiku un aizvērtu aktivitāti, kad tā ir pabeigta", - "readingAnalyticsDesc": "Noklikšķiniet uz prakses katrā ziņojumā, lai veiktu lasīšanas aktivitātes.", - "speakingAnalyticsDesc": "Ierakstiet balss ziņojumus, lai praktizētu runāšanu.", - "audioAnalyticsDesc": "Noklikšķiniet uz prakses katrā ziņojumā, lai veiktu klausīšanās aktivitātes.", "loginToAccount": "Pierakstieties savā kontā", "appDescription": "Mācieties valodu\nrakstot ziņas draugiem.", "languages": "Valodas", @@ -4473,7 +4470,6 @@ "usernameOrEmail": "Lietotājvārds vai e-pasts", "email": "E-pasts", "forgotPassword": "Aizmirsāt paroli?", - "writingAnalyticsDesc": "Sūtiet ziņojumus, lai praktizētu rakstīšanu.", "endActivity": "Beigt aktivitāti", "allLanguages": "Visas valodas", "chatListTooltip": "Šeit atradīsiet savas tiešās ziņas! Noklikšķiniet uz jebkura lietotāja avatara un izvēlieties „sākt sarunu”, lai nosūtītu DM.", @@ -9075,18 +9071,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9187,10 +9171,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10712,4 +10692,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb index 4e8c8d816..c664967e5 100644 --- a/lib/l10n/intl_nb.arb +++ b/lib/l10n/intl_nb.arb @@ -3387,9 +3387,6 @@ "courseSavedSuccessfully": "Kurset er lagret vellykket", "addCoursePlan": "Legg til en kursplan", "activityStatsButtonInstruction": "Klikk her for å se aktivitetsstatistikken din og for å lukke aktiviteten når du er ferdig", - "readingAnalyticsDesc": "Klikk på praksis på hver melding for leseaktiviteter.", - "speakingAnalyticsDesc": "Ta opp talebeskjeder for å øve på å snakke.", - "audioAnalyticsDesc": "Klikk på praksis på hver melding for lytteaktiviteter.", "loginToAccount": "Logg inn på kontoen min", "appDescription": "Lær et språk\nmens du sender tekst til vennene dine.", "languages": "Språk", @@ -3415,7 +3412,6 @@ "usernameOrEmail": "Brukernavn eller e-post", "email": "E-post", "forgotPassword": "Glemt passord?", - "writingAnalyticsDesc": "Send meldinger for å øve på å skrive.", "endActivity": "Avslutt aktivitet", "allLanguages": "Alle språk", "chatListTooltip": "Her finner du dine direktemeldinger! Klikk på en brukers avatar og «start samtale» for å sende en DM.", @@ -10182,18 +10178,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10294,10 +10278,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11819,4 +11799,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index 53b83987a..54ab70124 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -4471,9 +4471,6 @@ "courseSavedSuccessfully": "Cursus succesvol opgeslagen", "addCoursePlan": "Voeg een cursusplan toe", "activityStatsButtonInstruction": "Klik hier om je activiteitsstatistieken te bekijken en de activiteit te sluiten wanneer je klaar bent", - "readingAnalyticsDesc": "Klik op oefenen bij elk bericht voor leesactiviteiten.", - "speakingAnalyticsDesc": "Neem spraakberichten op voor spreekvaardigheid.", - "audioAnalyticsDesc": "Klik op oefenen bij elk bericht voor luisteractiviteiten.", "loginToAccount": "Log in op mijn account", "appDescription": "Leer een taal\nterwijl je met je vrienden chat.", "languages": "Talen", @@ -4499,7 +4496,6 @@ "usernameOrEmail": "Gebruikersnaam of e-mail", "email": "E-mail", "forgotPassword": "Wachtwoord vergeten?", - "writingAnalyticsDesc": "Stuur berichten om schrijven te oefenen.", "endActivity": "Eind activiteit", "allLanguages": "Alle talen", "chatListTooltip": "Hier vind je je directe berichten! Klik op de avatar van een gebruiker en “start een gesprek” om een DM te sturen.", @@ -9089,18 +9085,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9201,10 +9185,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10726,4 +10706,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index 95c392083..8ea0b6d8c 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -4472,9 +4472,6 @@ "courseSavedSuccessfully": "Kurs zapisano pomyślnie", "addCoursePlan": "Dodaj plan kursu", "activityStatsButtonInstruction": "Kliknij tutaj, aby zobaczyć statystyki aktywności i zamknąć aktywność po zakończeniu", - "readingAnalyticsDesc": "Kliknij ćwiczenie na każdej wiadomości, aby rozpocząć aktywności czytania.", - "speakingAnalyticsDesc": "Nagrywaj wiadomości głosowe, aby ćwiczyć mówienie.", - "audioAnalyticsDesc": "Kliknij ćwiczenie na każdej wiadomości, aby rozpocząć aktywności słuchania.", "loginToAccount": "Zaloguj się do mojego konta", "appDescription": "Ucz się języka\npoprzez pisanie wiadomości do znajomych.", "languages": "Języki", @@ -4500,7 +4497,6 @@ "usernameOrEmail": "Nazwa użytkownika lub e-mail", "email": "E-mail", "forgotPassword": "Zapomniałeś hasła?", - "writingAnalyticsDesc": "Wyślij wiadomości, aby ćwiczyć pisanie.", "endActivity": "Zakończ aktywność", "allLanguages": "Wszystkie języki", "chatListTooltip": "Tutaj znajdziesz swoje wiadomości bezpośrednie! Kliknij avatar dowolnego użytkownika i „rozpocznij rozmowę”, aby wysłać wiadomość prywatną.", @@ -9089,18 +9085,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9201,10 +9185,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10724,4 +10704,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 5ff7d1554..5ae9aad56 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -4462,9 +4462,6 @@ "courseSavedSuccessfully": "Curso salvo com sucesso", "addCoursePlan": "Adicionar um plano de curso", "activityStatsButtonInstruction": "Clique aqui para ver suas estatísticas de atividade e fechar a atividade quando terminar", - "readingAnalyticsDesc": "Clique em prática em cada mensagem para atividades de leitura.", - "speakingAnalyticsDesc": "Grave mensagens de voz para prática de fala.", - "audioAnalyticsDesc": "Clique em prática em cada mensagem para atividades de audição.", "loginToAccount": "Faça login na minha conta", "appDescription": "Aprenda um idioma\nenquanto envia mensagens aos seus amigos.", "languages": "Idiomas", @@ -4490,7 +4487,6 @@ "usernameOrEmail": "Nome de usuário ou email", "email": "Email", "forgotPassword": "Esqueceu a senha?", - "writingAnalyticsDesc": "Enviar mensagens para praticar a escrita.", "endActivity": "Encerrar atividade", "allLanguages": "Todos os idiomas", "chatListTooltip": "Aqui você encontrará suas mensagens diretas! Clique no avatar de qualquer usuário e \"iniciar conversa\" para enviar uma DM.", @@ -10189,18 +10185,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10301,10 +10285,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11826,4 +11806,4 @@ "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 7d95be64d..2ee91471f 100644 --- a/lib/l10n/intl_pt_BR.arb +++ b/lib/l10n/intl_pt_BR.arb @@ -4218,9 +4218,6 @@ "courseSavedSuccessfully": "Curso salvo com sucesso", "addCoursePlan": "Adicionar um plano de curso", "activityStatsButtonInstruction": "Clique aqui para ver suas estatísticas de atividade e fechar a atividade quando terminar", - "readingAnalyticsDesc": "Clique em praticar em cada mensagem para atividades de leitura.", - "speakingAnalyticsDesc": "Grave mensagens de voz para prática de fala.", - "audioAnalyticsDesc": "Clique em praticar em cada mensagem para atividades de escuta.", "loginToAccount": "Faça login na minha conta", "appDescription": "Aprenda um idioma\nenquanto envia mensagens para seus amigos.", "languages": "Idiomas", @@ -4246,7 +4243,6 @@ "usernameOrEmail": "Nome de usuário ou email", "email": "Email", "forgotPassword": "Esqueceu a senha?", - "writingAnalyticsDesc": "Envie mensagens para praticar a escrita.", "endActivity": "Encerrar atividade", "allLanguages": "Todos os idiomas", "chatListTooltip": "Aqui você encontrará suas mensagens diretas! Clique na foto de perfil de qualquer usuário e \"comece uma conversa\" para enviar uma DM.", @@ -9460,18 +9456,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9572,10 +9556,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11084,4 +11064,4 @@ "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 fed5efac0..d0fe6ccc6 100644 --- a/lib/l10n/intl_pt_PT.arb +++ b/lib/l10n/intl_pt_PT.arb @@ -3281,9 +3281,6 @@ "courseSavedSuccessfully": "Curso guardado com sucesso", "addCoursePlan": "Adicionar um plano de curso", "activityStatsButtonInstruction": "Clique aqui para ver as suas estatísticas de atividade e para fechar a atividade quando terminar", - "readingAnalyticsDesc": "Clique em prática em cada mensagem para atividades de leitura.", - "speakingAnalyticsDesc": "Grave mensagens de voz para prática de fala.", - "audioAnalyticsDesc": "Clique em prática em cada mensagem para atividades de audiência.", "loginToAccount": "Entrar na minha conta", "appDescription": "Aprenda uma língua\nenquanto envia mensagens aos seus amigos.", "languages": "Línguas", @@ -3309,7 +3306,6 @@ "usernameOrEmail": "Nome de utilizador ou email", "email": "Email", "forgotPassword": "Esqueceu a palavra-passe?", - "writingAnalyticsDesc": "Envie mensagens para praticar a escrita.", "endActivity": "Terminar atividade", "allLanguages": "Todas as línguas", "chatListTooltip": "Aqui você encontrará as suas mensagens diretas! Clique no avatar de qualquer utilizador e “comece uma conversa” para enviar uma DM.", @@ -10131,18 +10127,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10243,10 +10227,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11755,4 +11735,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb index c926aa697..1e3928315 100644 --- a/lib/l10n/intl_ro.arb +++ b/lib/l10n/intl_ro.arb @@ -3891,9 +3891,6 @@ "courseSavedSuccessfully": "Curs salvat cu succes", "addCoursePlan": "Adaugă un plan de curs", "activityStatsButtonInstruction": "Click aici pentru a vedea statisticile activității și pentru a închide activitatea când termini", - "readingAnalyticsDesc": "Click pe practică pentru fiecare mesaj pentru activități de citire.", - "speakingAnalyticsDesc": " Înregistrează mesaje vocale pentru practică de vorbire.", - "audioAnalyticsDesc": "Click pe practică pentru fiecare mesaj pentru activități de ascultare.", "loginToAccount": "Autentifică-te în contul meu", "appDescription": "Învață o limbă\nîn timp ce trimiți mesaje prietenilor.", "languages": "Limbi", @@ -3919,7 +3916,6 @@ "usernameOrEmail": "Nume de utilizator sau email", "email": "Email", "forgotPassword": "Ai uitat parola?", - "writingAnalyticsDesc": "Trimite mesaje pentru a exersa scrierea.", "endActivity": "Încheie activitatea", "allLanguages": "Toate limbile", "chatListTooltip": "Aici vei găsi mesajele tale directe! Fă clic pe avatarul oricărui utilizator și „începe conversația” pentru a trimite un mesaj direct.", @@ -9824,18 +9820,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9936,10 +9920,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11461,4 +11441,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index 96a184b39..5af69ff62 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -4410,9 +4410,6 @@ "courseSavedSuccessfully": "Курс софранился соответство", "addCoursePlan": "Добавить план курса", "activityStatsButtonInstruction": "Нажмите закатовок, чтобы проверить статистику вашей детальности и закрути курс концем", - "readingAnalyticsDesc": "Нажимайте практику на кожном сообщении для обыкновенную детальность.", - "speakingAnalyticsDesc": "Записывайте ковозновую обобовую повесь для практики говорения.", - "audioAnalyticsDesc": "Нажимайте практику на кождом сообщении для обыкновенную нашительность.", "loginToAccount": "войти в мой установки", "appDescription": "Совседанно наступайте человеческий язык,например, в котором написате друзям.", "languages": "Конфедерации", @@ -4438,7 +4435,6 @@ "usernameOrEmail": "Имя пользователя или email", "email": "Email", "forgotPassword": "Забыли пароль?", - "writingAnalyticsDesc": "Отправляйте сообщения для практики письма.", "endActivity": "Завершить деятельность", "allLanguages": "Все языки", "chatListTooltip": "Здесь вы найдете свои личные сообщения! Нажмите на аватар любого пользователя и выберите «начать разговор», чтобы отправить личное сообщение.", @@ -9194,18 +9190,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9306,10 +9290,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10831,4 +10811,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_sk.arb b/lib/l10n/intl_sk.arb index 1bbf03660..cc2e0809c 100644 --- a/lib/l10n/intl_sk.arb +++ b/lib/l10n/intl_sk.arb @@ -3095,9 +3095,6 @@ "courseSavedSuccessfully": "Kurz bol úspešne uložený", "addCoursePlan": "Pridať plán kurzu", "activityStatsButtonInstruction": "Kliknite sem pre zobrazenie štatistík vašej aktivity a na zatvorenie aktivity po dokončení", - "readingAnalyticsDesc": "Kliknite na cvičenie pri každej správe pre aktivity čítania.", - "speakingAnalyticsDesc": "Nahrávajte hlasové správy pre hovorené cvičenia.", - "audioAnalyticsDesc": "Kliknite na cvičenie pri každej správe pre aktivity počúvania.", "loginToAccount": "Prihlásiť sa do môjho účtu", "appDescription": "Naučte sa jazyk\npočas písania správ priateľom.", "languages": "Jazyky", @@ -3123,7 +3120,6 @@ "usernameOrEmail": "Používateľské meno alebo e-mail", "email": "E-mail", "forgotPassword": "Zabudli ste heslo?", - "writingAnalyticsDesc": "Posielajte správy na precvičovanie písania.", "endActivity": "Ukončiť aktivitu", "allLanguages": "Všetky jazyky", "chatListTooltip": "Tu nájdete svoje priame správy! Kliknite na avatar akéhokoľvek používateľa a „začať konverzáciu“, aby ste poslali DM.", @@ -10173,18 +10169,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10285,10 +10269,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11810,4 +11790,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_sl.arb b/lib/l10n/intl_sl.arb index 8c82ce6ff..606b69cf4 100644 --- a/lib/l10n/intl_sl.arb +++ b/lib/l10n/intl_sl.arb @@ -2427,9 +2427,6 @@ "courseSavedSuccessfully": "Tečaj je bil uspešno shranjen", "addCoursePlan": "Dodaj načrt tečaja", "activityStatsButtonInstruction": "Kliknite tukaj za ogled statistik vaše dejavnosti in za zapiranje dejavnosti po končanem delu", - "readingAnalyticsDesc": "Kliknite na prakso na vsaki sporočilu za dejavnosti branja.", - "speakingAnalyticsDesc": "Posnemite glasovne sporočila za vaje govora.", - "audioAnalyticsDesc": "Kliknite na prakso na vsaki sporočilu za dejavnosti poslušanja.", "loginToAccount": "Prijavite se v svoj račun", "appDescription": "Učite se jezika\nmedtem ko pošiljate sporočila prijateljem.", "languages": "Jeziki", @@ -2455,7 +2452,6 @@ "usernameOrEmail": "Uporabniško ime ali e-pošta", "email": "E-pošta", "forgotPassword": "Pozabljeno geslo?", - "writingAnalyticsDesc": "Pošiljajte sporočila za vadbo pisanja.", "endActivity": "Končaj dejavnost", "allLanguages": "Vsi jeziki", "chatListTooltip": "Tukaj boste našli svoja neposredna sporočila! Kliknite na avatar katerega koli uporabnika in izberite »začni pogovor«, da pošljete DM.", @@ -10170,18 +10166,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10282,10 +10266,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11807,4 +11787,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_sr.arb b/lib/l10n/intl_sr.arb index fce203742..ef8b1ee90 100644 --- a/lib/l10n/intl_sr.arb +++ b/lib/l10n/intl_sr.arb @@ -3508,9 +3508,6 @@ "courseSavedSuccessfully": "Курс успешно сачуван", "addCoursePlan": "Додај план курса", "activityStatsButtonInstruction": "Кликните овде да видите статистику активности и да затворите активност након завршетка", - "readingAnalyticsDesc": "Кликните на праксу на свакој поруци за активности читања.", - "speakingAnalyticsDesc": "Запишите гласовне поруке за вежбање говора.", - "audioAnalyticsDesc": "Kliknite na svaku poruku za vežbe slušanja.", "loginToAccount": "Prijavi se na svoj nalog", "appDescription": "Uči jezik\ndok šalješ poruke prijateljima.", "languages": "Jezici", @@ -3536,7 +3533,6 @@ "usernameOrEmail": "Korisničko ime ili email", "email": "Email", "forgotPassword": "Zaboravili ste lozinku?", - "writingAnalyticsDesc": "Šaljite poruke za vežbanje pisanja.", "endActivity": "Završi aktivnost", "allLanguages": "Svi jezici", "chatListTooltip": "Ovde ćete pronaći svoje direktne poruke! Kliknite na avatar bilo kojeg korisnika i “započni razgovor” da biste poslali DM.", @@ -10191,18 +10187,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10303,10 +10287,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11828,4 +11808,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb index e13fbd123..02b057490 100644 --- a/lib/l10n/intl_sv.arb +++ b/lib/l10n/intl_sv.arb @@ -4133,9 +4133,6 @@ "courseSavedSuccessfully": "Kursen sparades framgångsrikt", "addCoursePlan": "Lägg till en kursplan", "activityStatsButtonInstruction": "Klicka här för att se dina aktivitetsstatistik och för att stänga aktiviteten när du är klar", - "readingAnalyticsDesc": "Klicka på övning för varje meddelande för läsaktiviteter.", - "speakingAnalyticsDesc": "Spela in röstmeddelanden för talövningar.", - "audioAnalyticsDesc": "Klicka på övning för varje meddelande för lyssningsaktiviteter.", "loginToAccount": "Logga in på mitt konto", "appDescription": "Lär dig ett språk\nmedan du skickar meddelanden till dina vänner.", "languages": "Språk", @@ -4161,7 +4158,6 @@ "usernameOrEmail": "Användarnamn eller e-post", "email": "E-post", "forgotPassword": "Glömt lösenord?", - "writingAnalyticsDesc": "Skicka meddelanden för att öva på att skriva.", "endActivity": "Avsluta aktivitet", "allLanguages": "Alla språk", "chatListTooltip": "Här hittar du dina direktmeddelanden! Klicka på en användares avatar och “starta konversation” för att skicka ett DM.", @@ -9567,18 +9563,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9679,10 +9663,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11204,4 +11184,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ta.arb b/lib/l10n/intl_ta.arb index a6bf21a65..d3a1dd537 100644 --- a/lib/l10n/intl_ta.arb +++ b/lib/l10n/intl_ta.arb @@ -4348,9 +4348,6 @@ "courseSavedSuccessfully": "பாடம் வெற்றிகரமாக சேமிக்கப்பட்டது", "addCoursePlan": "பாடத்திட்டத்தைச் சேர்க்கவும்", "activityStatsButtonInstruction": "உங்கள் செயல்பாட்டு புள்ளிவிவரங்களைப் பார்க்க இங்கே கிளிக் செய்யவும் மற்றும் முடிந்ததும் செயல்பாட்டை மூடவும்", - "readingAnalyticsDesc": "ஒவ்வொரு செய்தியிலும் பயிற்சி செய்ய வாசிப்பு செயல்பாடுகளுக்காக கிளிக் செய்யவும்.", - "speakingAnalyticsDesc": "பேச்சு பயிற்சிக்காக குரல் செய்திகளை பதிவு செய்யவும்.", - "audioAnalyticsDesc": "ஒவ்வொரு செய்தியிலும் கேட்கும் செயல்பாடுகளுக்காக கிளிக் செய்யவும்.", "loginToAccount": "என் கணக்கில் உள்நுழையவும்", "appDescription": "ஒரு மொழியை கற்றுக்கொள்ளுங்கள்\nஉங்கள் நண்பர்களுடன் உரையாடும் போது.", "languages": "மொழிகள்", @@ -4376,7 +4373,6 @@ "usernameOrEmail": "பயனர்பெயர் அல்லது மின்னஞ்சல்", "email": "மின்னஞ்சல்", "forgotPassword": "கடவுச்சொல்லை மறந்துவிட்டீர்களா?", - "writingAnalyticsDesc": "எழுதும் பயிற்சிக்கு செய்திகள் அனுப்பவும்.", "endActivity": "செயல்பாட்டை முடிக்கவும்", "allLanguages": "அனைத்து மொழிகள்", "chatListTooltip": "இங்கே நீங்கள் நேரடி செய்திகளை காணலாம்! எந்த பயனரின் அவதாரத்தையும் கிளிக் செய்து “பேச்சு தொடங்கவும்” என்பதைக் கிளிக் செய்து DM அனுப்பவும்.", @@ -9313,18 +9309,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9425,10 +9409,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10950,4 +10930,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_te.arb b/lib/l10n/intl_te.arb index 38541ccfb..1c8942cf9 100644 --- a/lib/l10n/intl_te.arb +++ b/lib/l10n/intl_te.arb @@ -1883,9 +1883,6 @@ "courseSavedSuccessfully": "కోర్సు విజయవంతంగా సేవ్ చేయబడింది", "addCoursePlan": "కోర్సు ప్రణాళికను జోడించండి", "activityStatsButtonInstruction": "మీ కార్యకలాప గణాంకాలను చూడడానికి ఇక్కడ క్లిక్ చేయండి మరియు పూర్తి చేసినప్పుడు కార్యకలాపాన్ని మూసివేయండి", - "readingAnalyticsDesc": "పఠన కార్యకలాపాల కోసం ప్రతి సందేశంపై అభ్యాసం క్లిక్ చేయండి.", - "speakingAnalyticsDesc": "మాట్లాడే అభ్యాసం కోసం వాయిస్ సందేశాలను రికార్డ్ చేయండి.", - "audioAnalyticsDesc": "శ్రవణ కార్యకలాపాల కోసం ప్రతి సందేశంపై అభ్యాసం క్లిక్ చేయండి.", "loginToAccount": "నా ఖాతాలో లాగిన్ అవ్వండి", "appDescription": "భాష నేర్చుకోండి\nమీ స్నేహితులతో సందేశాలు పంపుతూ.", "languages": "భాషలు", @@ -1911,7 +1908,6 @@ "usernameOrEmail": "యూజర్‌నేమ్ లేదా ఇమెయిల్", "email": "ఇమెయిల్", "forgotPassword": "పాస్వర్డ్ మర్చిపోయారా?", - "writingAnalyticsDesc": "రాయడం సాధన కోసం సందేశాలు పంపండి.", "endActivity": "చర్యను ముగించండి", "allLanguages": "అన్ని భాషలు", "chatListTooltip": "ఇక్కడ మీరు మీ ప్రత్యక్ష సందేశాలను కనుగొంటారు! ఏదైనా యూజర్ యొక్క అవతారంపై క్లిక్ చేసి \"సంభాషణ ప్రారంభించండి\" అని క్లిక్ చేయండి.", @@ -10178,18 +10174,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10290,10 +10274,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11815,4 +11795,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_th.arb b/lib/l10n/intl_th.arb index 930f44d09..56390c82f 100644 --- a/lib/l10n/intl_th.arb +++ b/lib/l10n/intl_th.arb @@ -4419,9 +4419,6 @@ "courseSavedSuccessfully": "บันทึกคอร์สเรียบร้อยแล้ว", "addCoursePlan": "เพิ่มแผนคอร์ส", "activityStatsButtonInstruction": "คลิกที่นี่เพื่อดูสถิติกิจกรรมของคุณและปิดกิจกรรมเมื่อเสร็จสิ้น", - "readingAnalyticsDesc": "คลิกฝึกฝนในแต่ละข้อความสำหรับกิจกรรมการอ่าน", - "speakingAnalyticsDesc": "บันทึกข้อความเสียงเพื่อฝึกพูด", - "audioAnalyticsDesc": "คลิกฝึกฝนในแต่ละข้อความเพื่อกิจกรรมการฟัง", "loginToAccount": "เข้าสู่ระบบบัญชีของฉัน", "appDescription": "เรียนรู้ภาษา\nในขณะส่งข้อความถึงเพื่อนของคุณ", "languages": "ภาษา", @@ -4447,7 +4444,6 @@ "usernameOrEmail": "ชื่อผู้ใช้หรืออีเมล", "email": "อีเมล", "forgotPassword": "ลืมรหัสผ่าน?", - "writingAnalyticsDesc": "ส่งข้อความเพื่อฝึกฝนการเขียน", "endActivity": "สิ้นสุดกิจกรรม", "allLanguages": "ทุกภาษา", "chatListTooltip": "ที่นี่คุณจะพบข้อความส่วนตัวของคุณ! คลิกที่อวาตาร์ของผู้ใช้ใดก็ได้และ \"เริ่มสนทนา\" เพื่อส่งข้อความส่วนตัว", @@ -10147,18 +10143,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -10259,10 +10243,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11784,4 +11764,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb index acc92da05..ffb6cea3c 100644 --- a/lib/l10n/intl_tr.arb +++ b/lib/l10n/intl_tr.arb @@ -4355,9 +4355,6 @@ "courseSavedSuccessfully": "Kurs başarıyla kaydedildi", "addCoursePlan": "Bir kurs planı ekle", "activityStatsButtonInstruction": "Etkinlik istatistiklerinizi görmek ve tamamlandığında etkinliği kapatmak için buraya tıklayın", - "readingAnalyticsDesc": "Okuma etkinlikleri için her mesajda pratik yapmaya tıklayın.", - "speakingAnalyticsDesc": "Konuşma pratiği için sesli mesajlar kaydedin.", - "audioAnalyticsDesc": "Dinleme etkinlikleri için her mesajda pratik yapmaya tıklayın.", "loginToAccount": "Hesabınıza giriş yapın", "appDescription": "Bir dil öğrenin\narkadaşlarınıza mesaj atarken.", "languages": "Diller", @@ -4383,7 +4380,6 @@ "usernameOrEmail": "Kullanıcı adı veya e-posta", "email": "E-posta", "forgotPassword": "Şifremi unuttum?", - "writingAnalyticsDesc": "Yazma alıştırması yapmak için mesaj gönderin.", "endActivity": "Etkinliği sonlandır", "allLanguages": "Tüm diller", "chatListTooltip": "Burada doğrudan mesajlarınızı bulacaksınız! Herhangi bir kullanıcının avatarına tıklayın ve \"sohbet başlat\" seçeneğiyle DM gönderebilirsiniz.", @@ -9311,18 +9307,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9423,10 +9407,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10948,4 +10928,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_uk.arb b/lib/l10n/intl_uk.arb index 197558665..8a43f792a 100644 --- a/lib/l10n/intl_uk.arb +++ b/lib/l10n/intl_uk.arb @@ -4474,9 +4474,6 @@ "courseSavedSuccessfully": "Курс успішно збережено", "addCoursePlan": "Додати план курсу", "activityStatsButtonInstruction": "Натисніть тут, щоб переглянути статистику вашої активності та закрити активність після завершення", - "readingAnalyticsDesc": "Натисніть практику на кожному повідомленні для читання активностей.", - "speakingAnalyticsDesc": "Запишіть голосові повідомлення для практики говоріння.", - "audioAnalyticsDesc": "Натисніть практику на кожному повідомленні для слухання активностей.", "loginToAccount": "Увійти до мого облікового запису", "appDescription": "Вивчайте мову\nпишучи повідомлення друзям.", "languages": "Мови", @@ -4502,7 +4499,6 @@ "usernameOrEmail": "Ім'я користувача або електронна пошта", "email": "Електронна пошта", "forgotPassword": "Забули пароль?", - "writingAnalyticsDesc": "Надсилайте повідомлення для практики написання.", "endActivity": "Завершити діяльність", "allLanguages": "Всі мови", "chatListTooltip": "Тут ви знайдете свої особисті повідомлення! Натисніть на аватар будь-якого користувача і «почати розмову», щоб надіслати особисте повідомлення.", @@ -9083,18 +9079,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9195,10 +9179,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10720,4 +10700,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_vi.arb b/lib/l10n/intl_vi.arb index f03a6f71b..1ad72a151 100644 --- a/lib/l10n/intl_vi.arb +++ b/lib/l10n/intl_vi.arb @@ -4037,9 +4037,6 @@ "courseSavedSuccessfully": "Lưu khóa học thành công", "addCoursePlan": "Thêm kế hoạch khóa học", "activityStatsButtonInstruction": "Nhấn vào đây để xem thống kê hoạt động của bạn và đóng hoạt động khi hoàn thành", - "readingAnalyticsDesc": "Nhấn luyện tập trên từng tin nhắn để thực hiện các hoạt động đọc.", - "speakingAnalyticsDesc": "Ghi âm tin nhắn thoại để luyện nói.", - "audioAnalyticsDesc": "Nhấn luyện tập trên từng tin nhắn để thực hiện các hoạt động nghe.", "loginToAccount": "Đăng nhập vào tài khoản của tôi", "appDescription": "Học một ngôn ngữ\ntrong khi nhắn tin với bạn bè.", "languages": "Ngôn ngữ", @@ -4065,7 +4062,6 @@ "usernameOrEmail": "Tên người dùng hoặc email", "email": "Email", "forgotPassword": "Quên mật khẩu?", - "writingAnalyticsDesc": "Gửi tin nhắn để luyện viết.", "endActivity": "Kết thúc hoạt động", "allLanguages": "Tất cả các ngôn ngữ", "chatListTooltip": "Bạn sẽ tìm thấy tin nhắn trực tiếp của mình ở đây! Nhấp vào ảnh đại diện của bất kỳ người dùng nào và chọn “bắt đầu cuộc trò chuyện” để gửi tin nhắn trực tiếp.", @@ -4626,18 +4622,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -4738,10 +4722,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -6296,4 +6276,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_yue.arb b/lib/l10n/intl_yue.arb index b4ef494fc..f9fc7139d 100644 --- a/lib/l10n/intl_yue.arb +++ b/lib/l10n/intl_yue.arb @@ -1806,9 +1806,6 @@ "courseSavedSuccessfully": "課程已成功保存", "addCoursePlan": "添加課程計劃", "activityStatsButtonInstruction": "點擊此處查看您的活動統計數據,完成後關閉活動", - "readingAnalyticsDesc": "點擊每條消息進行閱讀練習。", - "speakingAnalyticsDesc": "錄製語音消息進行口語練習。", - "audioAnalyticsDesc": "點擊每條消息進行聽力練習。", "loginToAccount": "登入我的帳戶", "appDescription": "學習一種語言\n同時與朋友發訊息。", "languages": "語言", @@ -1834,7 +1831,6 @@ "usernameOrEmail": "用戶名或電郵", "email": "電郵", "forgotPassword": "忘記密碼?", - "writingAnalyticsDesc": "發送訊息練習寫作。", "endActivity": "結束活動", "allLanguages": "所有語言", "chatListTooltip": "喺呢度你會搵到你嘅直接訊息!點擊任何用戶嘅頭像同「開始對話」嚟發送私訊。", @@ -9774,18 +9770,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9886,10 +9870,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11817,4 +11797,4 @@ "type": "String", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index 75810b19e..ea4748ceb 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -4475,9 +4475,6 @@ "courseSavedSuccessfully": "课程已成功保存", "addCoursePlan": "添加课程计划", "activityStatsButtonInstruction": "点击这里查看您的活动统计,完成后关闭活动", - "readingAnalyticsDesc": "点击每条消息进行阅读活动练习。", - "speakingAnalyticsDesc": "录制语音消息进行口语练习。", - "audioAnalyticsDesc": "点击每条消息进行听力活动练习。", "loginToAccount": "登录我的账户", "appDescription": "学习一门语言\n同时给朋友发消息。", "languages": "语言", @@ -4503,7 +4500,6 @@ "usernameOrEmail": "用户名或电子邮件", "email": "电子邮件", "forgotPassword": "忘记密码?", - "writingAnalyticsDesc": "发送消息以练习写作。", "endActivity": "结束活动", "allLanguages": "所有语言", "chatListTooltip": "在这里你会找到你的私信!点击任何用户的头像并选择“开始对话”以发送私信。", @@ -9080,18 +9076,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9192,10 +9176,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10717,4 +10697,4 @@ "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 d06a0fd7a..6e32ad1ad 100644 --- a/lib/l10n/intl_zh_Hant.arb +++ b/lib/l10n/intl_zh_Hant.arb @@ -4450,9 +4450,6 @@ "courseSavedSuccessfully": "课程已成功保存", "addCoursePlan": "添加课程计划", "activityStatsButtonInstruction": "点击这里查看你的活动统计,并在完成后关闭活动", - "readingAnalyticsDesc": "点击每条消息的练习以进行阅读活动。", - "speakingAnalyticsDesc": "录制语音消息进行口语练习。", - "audioAnalyticsDesc": "点击每条消息的练习以进行听力活动。", "loginToAccount": "登录我的账户", "appDescription": "学习一门语言\n同时给朋友发短信。", "languages": "語言", @@ -4478,7 +4475,6 @@ "usernameOrEmail": "用户名或电子邮件", "email": "电子邮件", "forgotPassword": "忘记密码?", - "writingAnalyticsDesc": "发送消息以练习写作。", "endActivity": "结束活动", "allLanguages": "所有语言", "chatListTooltip": "在这里你会找到你的直接消息!点击任何用户的头像并选择“开始对话”以发送私信。", @@ -9100,18 +9096,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -9212,10 +9196,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -10724,4 +10704,4 @@ "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 1dd8b20b6..04f8e8780 100644 --- a/lib/pangea/analytics_data/analytics_data_service.dart +++ b/lib/pangea/analytics_data/analytics_data_service.dart @@ -113,6 +113,7 @@ class AnalyticsDataService { Future _initAnalytics() async { try { + Logs().i("Initializing analytics database."); final client = _analyticsClientGetter.client; if (client.prevBatch == null) { await client.onSync.stream.first; @@ -130,10 +131,19 @@ class AnalyticsDataService { client: client, dataService: this, ); - - await updateXPOffset(analyticsProfile.xpOffset ?? 0); - await _syncController!.bulkUpdate(); + + final vocab = await getAggregatedConstructs(ConstructTypeEnum.vocab); + final morphs = await getAggregatedConstructs(ConstructTypeEnum.morph); + final constructs = [...vocab.values, ...morphs.values]; + final totalXP = constructs.fold(0, (total, c) => total + c.points); + await _analyticsClientGetter.database.updateDerivedStats( + DerivedAnalyticsDataModel( + totalXP: totalXP, + offset: analyticsProfile.xpOffset ?? 0, + ), + ); + _syncController!.start(); await _initMergeTable(); @@ -272,7 +282,6 @@ class AnalyticsDataService { Future> getAggregatedConstructs( ConstructTypeEnum type, ) async { - await _ensureInitialized(); final combined = await _analyticsClientGetter.database.getAggregatedConstructs(type); @@ -341,14 +350,10 @@ class AnalyticsDataService { AnalyticsUpdate update, ) async { final events = []; - - final morphIds = update.addedConstructs - .where((c) => c.constructType == ConstructTypeEnum.morph) - .map((c) => c.identifier) - .toSet(); + final updateIds = update.addedConstructs.map((c) => c.identifier).toList(); final prevData = await derivedData; - final prevMorphs = await getConstructUses(morphIds.toList()); + final prevConstructs = await getConstructUses(updateIds); _invalidateCaches(); await _ensureInitialized(); @@ -359,7 +364,17 @@ class AnalyticsDataService { final blocked = blockedConstructs; _mergeTable.addConstructsByUses(update.addedConstructs, blocked); - final newData = await derivedData; + final newConstructs = await getConstructUses(updateIds); + int points = 0; + for (final id in updateIds) { + final prevPoints = prevConstructs[id]?.points ?? 0; + final newPoints = newConstructs[id]?.points ?? 0; + points += (newPoints - prevPoints); + } + events.add(XPGainedEvent(points, update.targetID)); + + final newData = prevData.copyWith(totalXP: prevData.totalXP + points); + await _analyticsClientGetter.database.updateDerivedStats(newData); // Update public profile each time that new analytics are added. // If the level hasn't changed, this will not send an update to the server. @@ -383,10 +398,10 @@ class AnalyticsDataService { ); } - final newMorphs = await getConstructUses(morphIds.toList()); - final newUnlockedMorphs = morphIds.where((id) { - final prevPoints = prevMorphs[id]?.points ?? 0; - final newPoints = newMorphs[id]?.points ?? 0; + final newUnlockedMorphs = updateIds.where((id) { + if (id.type != ConstructTypeEnum.morph) return false; + final prevPoints = prevConstructs[id]?.points ?? 0; + final newPoints = newConstructs[id]?.points ?? 0; return prevPoints < _morphUnlockXP && newPoints >= _morphUnlockXP; }).toSet(); @@ -394,9 +409,6 @@ class AnalyticsDataService { events.add(MorphUnlockedEvent(newUnlockedMorphs)); } - final points = update.addedConstructs.fold(0, (s, c) => s + c.xp); - events.add(XPGainedEvent(points, update.targetID)); - if (update.blockedConstruct != null) { events.add(ConstructBlockedEvent(update.blockedConstruct!)); } diff --git a/lib/pangea/analytics_data/analytics_database.dart b/lib/pangea/analytics_data/analytics_database.dart index 3d16f9018..07259e835 100644 --- a/lib/pangea/analytics_data/analytics_database.dart +++ b/lib/pangea/analytics_data/analytics_database.dart @@ -31,9 +31,7 @@ class AnalyticsDatabase with DatabaseFileStorage { late Box _aggregatedLocalVocabConstructsBox; late Box _aggregatedServerMorphConstructsBox; late Box _aggregatedLocalMorphConstructsBox; - - late Box _derivedServerStatsBox; - late Box _derivedLocalStatsBox; + late Box _derivedStatsBox; static const String _serverConstructsBoxName = 'box_server_constructs'; @@ -52,9 +50,7 @@ class AnalyticsDatabase with DatabaseFileStorage { static const String _aggregatedLocalMorphConstructsBoxName = 'box_aggregated_local_morph_constructs'; - static const String _derivedServerStatsBoxName = 'box_derived_server_stats'; - - static const String _derivedLocalStatsBoxName = 'box_derived_local_stats'; + static const String _derivedStatsBoxName = 'box_derived_stats'; static const String _lastEventTimestampBoxName = 'box_last_event_timestamp'; @@ -114,8 +110,7 @@ class AnalyticsDatabase with DatabaseFileStorage { _aggregatedLocalVocabConstructsBoxName, _aggregatedServerMorphConstructsBoxName, _aggregatedLocalMorphConstructsBoxName, - _derivedServerStatsBoxName, - _derivedLocalStatsBoxName, + _derivedStatsBoxName, }, sqfliteDatabase: database, sqfliteFactory: sqfliteFactory, @@ -144,11 +139,8 @@ class AnalyticsDatabase with DatabaseFileStorage { _aggregatedLocalMorphConstructsBox = _collection.openBox( _aggregatedLocalMorphConstructsBoxName, ); - _derivedServerStatsBox = _collection.openBox( - _derivedServerStatsBoxName, - ); - _derivedLocalStatsBox = _collection.openBox( - _derivedLocalStatsBoxName, + _derivedStatsBox = _collection.openBox( + _derivedStatsBoxName, ); } @@ -167,8 +159,7 @@ class AnalyticsDatabase with DatabaseFileStorage { _aggregatedLocalVocabConstructsBox.clearQuickAccessCache(); _aggregatedServerMorphConstructsBox.clearQuickAccessCache(); _aggregatedLocalMorphConstructsBox.clearQuickAccessCache(); - _derivedServerStatsBox.clearQuickAccessCache(); - _derivedLocalStatsBox.clearQuickAccessCache(); + _derivedStatsBox.clearQuickAccessCache(); await _collection.clear(); } @@ -191,30 +182,13 @@ class AnalyticsDatabase with DatabaseFileStorage { return DateTime.parse(timestampString); } - Future _getDerivedServerStats() async { - final raw = await _derivedServerStatsBox.get('derived_stats'); - return raw == null - ? DerivedAnalyticsDataModel() - : DerivedAnalyticsDataModel.fromJson( - Map.from(raw), - ); - } - - Future _getDerivedLocalStats() async { - final raw = await _derivedLocalStatsBox.get('derived_stats'); - return raw == null - ? DerivedAnalyticsDataModel() - : DerivedAnalyticsDataModel.fromJson( - Map.from(raw), - ); - } - Future getDerivedStats() async { - DerivedAnalyticsDataModel server = DerivedAnalyticsDataModel(); - DerivedAnalyticsDataModel local = DerivedAnalyticsDataModel(); - server = await _getDerivedServerStats(); - local = await _getDerivedLocalStats(); - return server.merge(local); + final raw = await _derivedStatsBox.get('derived_stats'); + return raw == null + ? DerivedAnalyticsDataModel() + : DerivedAnalyticsDataModel.fromJson( + Map.from(raw), + ); } Future> getUses({ @@ -391,7 +365,6 @@ class AnalyticsDatabase with DatabaseFileStorage { await _localConstructsBox.clear(); await _aggregatedLocalVocabConstructsBox.clear(); await _aggregatedLocalMorphConstructsBox.clear(); - await _derivedLocalStatsBox.clear(); }); } @@ -511,29 +484,17 @@ class AnalyticsDatabase with DatabaseFileStorage { Future updateXPOffset(int offset) { return _transaction(() async { - final serverStats = await _getDerivedServerStats(); - final localStats = await _getDerivedLocalStats(); - - final updatedServerStats = serverStats.copyWith( - offset: offset, - ); - final updatedLocalStats = localStats.copyWith( - offset: offset, - ); - - await _derivedServerStatsBox.put( + final stats = await getDerivedStats(); + final updatedStats = stats.copyWith(offset: offset); + await _derivedStatsBox.put( 'derived_stats', - updatedServerStats.toJson(), - ); - await _derivedLocalStatsBox.put( - 'derived_stats', - updatedLocalStats.toJson(), + updatedStats.toJson(), ); }); } Future updateDerivedStats(DerivedAnalyticsDataModel newStats) => - _derivedServerStatsBox.put( + _derivedStatsBox.put( 'derived_stats', newStats.toJson(), ); @@ -546,7 +507,6 @@ class AnalyticsDatabase with DatabaseFileStorage { final stopwatch = Stopwatch()..start(); await _transaction(() async { final lastUpdated = await getLastEventTimestamp(); - final derivedData = await _getDerivedServerStats(); DateTime mostRecent = lastUpdated ?? events.first.event.originServerTs; final existingKeys = (await _serverConstructsBox.getAllKeys()).toSet(); @@ -610,19 +570,6 @@ class AnalyticsDatabase with DatabaseFileStorage { ); } - // Update derived stats - final updatedDerivedStats = derivedData.update( - [ - ...aggregatedVocabUses, - ...aggregatedMorphUses, - ], - ); - - await _derivedServerStatsBox.put( - 'derived_stats', - updatedDerivedStats.toJson(), - ); - // Update timestamp await _lastEventTimestampBox.put( 'last_event_timestamp', @@ -682,14 +629,6 @@ class AnalyticsDatabase with DatabaseFileStorage { entry.value.toJson(), ); } - - // Update derived stats - final derivedData = await _getDerivedLocalStats(); - final updatedDerivedStats = derivedData.update(uses); - await _derivedLocalStatsBox.put( - 'derived_stats', - updatedDerivedStats.toJson(), - ); }); stopwatch.stop(); diff --git a/lib/pangea/analytics_details_popup/analytics_details_popup.dart b/lib/pangea/analytics_details_popup/analytics_details_popup.dart index 74de3ef25..4c97d6c6b 100644 --- a/lib/pangea/analytics_details_popup/analytics_details_popup.dart +++ b/lib/pangea/analytics_details_popup/analytics_details_popup.dart @@ -9,6 +9,7 @@ import 'package:fluffychat/pangea/analytics_details_popup/vocab_analytics_detail import 'package:fluffychat/pangea/analytics_details_popup/vocab_analytics_list_view.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics_summary/learning_progress_indicators.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; @@ -129,12 +130,30 @@ class ConstructAnalyticsViewState extends State { @override Widget build(BuildContext context) { - return widget.view == ConstructTypeEnum.morph - ? widget.construct == null - ? MorphAnalyticsListView(controller: this) - : MorphDetailsView(constructId: widget.construct!) - : widget.construct == null - ? VocabAnalyticsListView(controller: this) - : VocabDetailsView(constructId: widget.construct!); + return Scaffold( + body: SafeArea( + child: Padding( + padding: const EdgeInsetsGeometry.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (widget.construct == null) + LearningProgressIndicators( + selected: widget.view.indicator, + ), + Expanded( + child: widget.view == ConstructTypeEnum.morph + ? widget.construct == null + ? MorphAnalyticsListView(controller: this) + : MorphDetailsView(constructId: widget.construct!) + : widget.construct == null + ? VocabAnalyticsListView(controller: this) + : VocabDetailsView(constructId: widget.construct!), + ), + ], + ), + ), + ), + ); } } diff --git a/lib/pangea/analytics_details_popup/analytics_details_usage_content.dart b/lib/pangea/analytics_details_popup/analytics_details_usage_content.dart index 3c373cb89..dd258718d 100644 --- a/lib/pangea/analytics_details_popup/analytics_details_usage_content.dart +++ b/lib/pangea/analytics_details_popup/analytics_details_usage_content.dart @@ -17,7 +17,10 @@ class AnalyticsDetailsUsageContent extends StatelessWidget { Widget build(BuildContext context) { return Column( children: [ - LemmaUseExampleMessages(construct: construct), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: LemmaUseExampleMessages(construct: construct), + ), ...LearningSkillsEnum.values.where((v) => v.isVisible).map((skill) { return LemmaUsageDots( construct: construct, diff --git a/lib/pangea/analytics_details_popup/construct_xp_progress_bar.dart b/lib/pangea/analytics_details_popup/construct_xp_progress_bar.dart new file mode 100644 index 000000000..744fb952c --- /dev/null +++ b/lib/pangea/analytics_details_popup/construct_xp_progress_bar.dart @@ -0,0 +1,62 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_constants.dart'; +import 'package:fluffychat/pangea/analytics_summary/animated_progress_bar.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class ConstructXPProgressBar extends StatelessWidget { + final ConstructIdentifier construct; + + const ConstructXPProgressBar({ + required this.construct, + super.key, + }); + + @override + Widget build(BuildContext context) { + final categories = ConstructLevelEnum.values.sorted( + (a, b) => a.xpNeeded.compareTo(b.xpNeeded), + ); + + final analyticsService = Matrix.of(context).analyticsDataService; + + return Column( + spacing: 8.0, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [...categories.map((c) => c.icon())], + ), + StreamBuilder( + stream: + analyticsService.updateDispatcher.constructUpdateStream.stream, + builder: (context, snapshot) { + return FutureBuilder( + future: analyticsService.getConstructUse(construct), + builder: (context, snapshot) { + final points = snapshot.data?.points ?? 0; + final progress = + min(1.0, points / AnalyticsConstants.xpForFlower); + + return AnimatedProgressBar( + height: 20.0, + widthPercent: progress, + barColor: AppConfig.goldLight, + backgroundColor: + Theme.of(context).colorScheme.secondaryContainer, + ); + }, + ); + }, + ), + ], + ); + } +} diff --git a/lib/pangea/analytics_details_popup/lemma_usage_dots.dart b/lib/pangea/analytics_details_popup/lemma_usage_dots.dart index b54d8d1f6..ea88d35c1 100644 --- a/lib/pangea/analytics_details_popup/lemma_usage_dots.dart +++ b/lib/pangea/analytics_details_popup/lemma_usage_dots.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_use_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; @@ -58,41 +59,29 @@ class LemmaUsageDots extends StatelessWidget { ? construct.lemmaCategory.color(context) : construct.lemmaCategory.darkColor(context)); - final description = category.description(context); - - return Padding( - padding: const EdgeInsets.symmetric(vertical: 20), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Tooltip( - triggerMode: TooltipTriggerMode.tap, - message: tooltip, - child: Icon( - icon, - size: 24, - color: textColor.withValues(alpha: 0.7), - ), - ), - const SizedBox(width: 8.0), - Flexible( - child: dots.isEmpty - ? description != null - ? Text( - description, - style: const TextStyle( - fontStyle: FontStyle.italic, - ), - ) - : const SizedBox() - : Wrap( - spacing: 3, - runSpacing: 5, - children: dots, - ), - ), - ], + return ListTile( + leading: Tooltip( + triggerMode: TooltipTriggerMode.tap, + message: tooltip, + child: Icon( + icon, + size: 24, + color: textColor.withValues(alpha: 0.7), + ), + ), + title: Flexible( + child: dots.isEmpty + ? Text( + L10n.of(context).noDataFound, + style: const TextStyle( + fontStyle: FontStyle.italic, + ), + ) + : Wrap( + spacing: 3, + runSpacing: 5, + children: dots, + ), ), ); } diff --git a/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart b/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart index 85975cef3..179e5c919 100644 --- a/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart +++ b/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart @@ -1,15 +1,13 @@ -import 'dart:convert'; - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; import 'package:fluffychat/pangea/analytics_downloads/analytics_download_button.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_navigation_util.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; @@ -156,9 +154,13 @@ class MorphFeatureBox extends StatelessWidget { morphFeature: morphFeature, morphTag: morphTag, constructAnalytics: snapshot.data, - onTap: () => context.go( - "/rooms/analytics/${id.type.string}/${Uri.encodeComponent(jsonEncode(id.toJson()))}", - ), + onTap: () { + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.morphsUsed, + construct: id, + ); + }, ), ); }, diff --git a/lib/pangea/analytics_details_popup/morph_details_view.dart b/lib/pangea/analytics_details_popup/morph_details_view.dart index fa2914cb5..6b22469a7 100644 --- a/lib/pangea/analytics_details_popup/morph_details_view.dart +++ b/lib/pangea/analytics_details_popup/morph_details_view.dart @@ -8,6 +8,7 @@ import 'package:fluffychat/pangea/lemmas/construct_xp_widget.dart'; import 'package:fluffychat/pangea/morphs/morph_feature_display.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/morphs/morph_tag_display.dart'; +import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; class MorphDetailsView extends StatelessWidget { @@ -34,7 +35,9 @@ class MorphDetailsView extends StatelessWidget { ? level.color(context) : level.darkColor(context); - return SingleChildScrollView( + return MaxWidthBody( + maxWidth: 600.0, + showBorder: false, child: Column( spacing: 16.0, children: [ diff --git a/lib/pangea/analytics_details_popup/vocab_analytics_details_view.dart b/lib/pangea/analytics_details_popup/vocab_analytics_details_view.dart index d20a9ac6f..c2c532852 100644 --- a/lib/pangea/analytics_details_popup/vocab_analytics_details_view.dart +++ b/lib/pangea/analytics_details_popup/vocab_analytics_details_view.dart @@ -4,12 +4,17 @@ import 'package:collection/collection.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_usage_content.dart'; +import 'package:fluffychat/pangea/analytics_details_popup/construct_xp_progress_bar.dart'; import 'package:fluffychat/pangea/analytics_details_popup/word_text_with_audio_button.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_navigation_util.dart'; +import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/lemmas/construct_xp_widget.dart'; import 'package:fluffychat/pangea/toolbar/word_card/word_zoom_widget.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// Displays information about selected lemma, and its usage @@ -21,6 +26,31 @@ class VocabDetailsView extends StatelessWidget { required this.constructId, }); + Future _blockLemma(BuildContext context) async { + final resp = await showOkCancelAlertDialog( + context: context, + title: L10n.of(context).areYouSure, + message: L10n.of(context).blockLemmaConfirmation, + isDestructive: true, + ); + + if (resp != OkCancelResult.ok) return; + final res = await showFutureLoadingDialog( + context: context, + future: () => Matrix.of(context) + .analyticsDataService + .updateService + .blockConstruct(constructId), + ); + + if (!res.isError) { + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.wordsUsed, + ); + } + } + @override Widget build(BuildContext context) { final analyticsService = Matrix.of(context).analyticsDataService; @@ -42,7 +72,9 @@ class VocabDetailsView extends StatelessWidget { .toList() ?? []; - return SingleChildScrollView( + return MaxWidthBody( + maxWidth: 600.0, + showBorder: false, child: Column( spacing: 16.0, children: [ @@ -54,37 +86,25 @@ class VocabDetailsView extends StatelessWidget { langCode: MatrixState.pangeaController.userController.userL2Code!, construct: constructId, + onClose: Navigator.of(context).pop, ), ], ), if (construct != null) Column( + spacing: 20.0, children: [ Padding( - padding: const EdgeInsets.all(20.0), - child: ConstructXpWidget( - icon: StreamBuilder( - key: ValueKey(constructId.string), - stream: analyticsService.updateDispatcher - .lemmaUpdateStream(constructId), - builder: (context, update) { - final emoji = update.data?.emojis?.firstOrNull ?? - constructId.userSetEmoji; - return Text( - emoji ?? "-", - style: const TextStyle(fontSize: 24.0), - ); - }, - ), - level: construct.lemmaCategory, - points: construct.points, + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: ConstructXPProgressBar( + construct: constructId, ), ), - Padding( - padding: const EdgeInsets.all(20.0), - child: Column( - children: [ - Align( + Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Align( alignment: Alignment.centerLeft, child: _VocabForms( lemma: constructId.lemma, @@ -92,11 +112,24 @@ class VocabDetailsView extends StatelessWidget { textColor: textColor, ), ), - AnalyticsDetailsUsageContent( - construct: construct, + ), + AnalyticsDetailsUsageContent( + construct: construct, + ), + ListTile( + leading: Icon( + Icons.delete_outline, + color: Theme.of(context).colorScheme.error, ), - ], - ), + title: Text( + L10n.of(context).delete, + style: TextStyle( + color: Theme.of(context).colorScheme.error, + ), + ), + onTap: () => _blockLemma(context), + ), + ], ), ], ), diff --git a/lib/pangea/analytics_details_popup/vocab_analytics_list_tile.dart b/lib/pangea/analytics_details_popup/vocab_analytics_list_tile.dart index 3d7ede256..bac695c7a 100644 --- a/lib/pangea/analytics_details_popup/vocab_analytics_list_tile.dart +++ b/lib/pangea/analytics_details_popup/vocab_analytics_list_tile.dart @@ -4,50 +4,44 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/common/widgets/shrinkable_text.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; +import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/matrix.dart'; -class VocabAnalyticsListTile extends StatefulWidget { +class VocabAnalyticsListTile extends StatelessWidget { + final void Function()? onTap; + final ConstructIdentifier constructId; + final ConstructLevelEnum level; + final Color textColor; + final bool selected; + const VocabAnalyticsListTile({ super.key, required this.constructId, this.level = ConstructLevelEnum.seeds, required this.textColor, this.onTap, + this.selected = false, }); - final void Function()? onTap; - final ConstructIdentifier constructId; - final ConstructLevelEnum level; - final Color textColor; - - @override - VocabAnalyticsListTileState createState() => VocabAnalyticsListTileState(); -} - -class VocabAnalyticsListTileState extends State { - bool _isHovered = false; - final double maxWidth = 100; final double padding = 8.0; @override Widget build(BuildContext context) { final analyticsService = Matrix.of(context).analyticsDataService; - return MouseRegion( - onEnter: (_) => setState(() => _isHovered = true), - onExit: (_) => setState(() => _isHovered = false), - child: Material( + return HoverBuilder( + builder: (context, hovered) => Material( type: MaterialType.transparency, child: InkWell( borderRadius: BorderRadius.circular(AppConfig.borderRadius), - onTap: widget.onTap, + onTap: onTap, child: Container( height: maxWidth, width: maxWidth, padding: EdgeInsets.all(padding), decoration: BoxDecoration( - color: _isHovered - ? widget.textColor.withAlpha(20) + color: hovered || selected + ? textColor.withAlpha(20) : Colors.transparent, borderRadius: BorderRadius.circular(AppConfig.borderRadius), ), @@ -56,10 +50,10 @@ class VocabAnalyticsListTileState extends State { children: [ StreamBuilder( stream: analyticsService.updateDispatcher - .lemmaUpdateStream(widget.constructId), + .lemmaUpdateStream(constructId), builder: (context, snapshot) { final emoji = snapshot.data?.emojis?.firstOrNull ?? - widget.constructId.userSetEmoji; + constructId.userSetEmoji; return Container( alignment: Alignment.center, @@ -71,7 +65,7 @@ class VocabAnalyticsListTileState extends State { fontSize: 22, ), ) - : widget.level.icon(36.0), + : level.icon(36.0), ); }, ), @@ -80,11 +74,11 @@ class VocabAnalyticsListTileState extends State { padding: const EdgeInsets.only(top: 4), height: (maxWidth - padding * 2) * 0.4, child: ShrinkableText( - text: widget.constructId.lemma, + text: constructId.lemma, maxWidth: maxWidth - padding * 2, style: TextStyle( fontSize: 16, - color: widget.textColor, + color: textColor, ), ), ), diff --git a/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart b/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart index c525c2ef2..d2da896be 100644 --- a/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart +++ b/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart @@ -10,8 +10,10 @@ import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; import 'package:fluffychat/pangea/analytics_details_popup/vocab_analytics_list_tile.dart'; import 'package:fluffychat/pangea/analytics_downloads/analytics_download_button.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_navigation_util.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; @@ -87,6 +89,20 @@ class VocabAnalyticsListView extends StatelessWidget { filters.add(const DownloadAnalyticsButton()); } + final constructParam = + GoRouterState.of(context).pathParameters['construct']; + + ConstructIdentifier? selectedConstruct; + if (constructParam != null) { + try { + selectedConstruct = ConstructIdentifier.fromJson( + jsonDecode(constructParam), + ); + } catch (e) { + debugPrint("Invalid construct ID format in route: $constructParam"); + } + } + return Column( children: [ AnimatedContainer( @@ -188,8 +204,10 @@ class VocabAnalyticsListView extends StatelessWidget { langCode: MatrixState.pangeaController .userController.userL2Code!, ); - context.go( - "/rooms/analytics/${vocabItem.id.type.string}/${Uri.encodeComponent(jsonEncode(vocabItem.id.toJson()))}", + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.wordsUsed, + construct: vocabItem.id, ); }, constructId: vocabItem.id, @@ -198,6 +216,7 @@ class VocabAnalyticsListView extends StatelessWidget { ? vocabItem.lemmaCategory.darkColor(context) : vocabItem.lemmaCategory.color(context), level: vocabItem.lemmaCategory, + selected: vocabItem.id == selectedConstruct, ); }, childCount: _filteredVocab!.length, diff --git a/lib/pangea/analytics_misc/analytics_navigation_util.dart b/lib/pangea/analytics_misc/analytics_navigation_util.dart new file mode 100644 index 000000000..f6714618f --- /dev/null +++ b/lib/pangea/analytics_misc/analytics_navigation_util.dart @@ -0,0 +1,59 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; + +import 'package:go_router/go_router.dart'; + +import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; +import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; + +class AnalyticsNavigationUtil { + static Future navigateToAnalytics({ + required BuildContext context, + ProgressIndicatorEnum? view, + ConstructIdentifier? construct, + String? activityRoomId, + }) async { + if (view == null) { + context.go('/rooms/analytics'); + return; + } + + if (view == ProgressIndicatorEnum.activities) { + if (activityRoomId != null) { + context.go('/rooms/analytics/activities/$activityRoomId'); + return; + } + context.go('/rooms/analytics/activities'); + return; + } + + if (construct == null || + !{ProgressIndicatorEnum.wordsUsed, ProgressIndicatorEnum.morphsUsed} + .contains(view)) { + context.go("/rooms/analytics/${view.route}"); + return; + } + + final isColumnMode = FluffyThemes.isColumnMode(context); + if (isColumnMode) { + context.go( + '/rooms/analytics/${view.route}/${Uri.encodeComponent(jsonEncode(construct.toJson()))}', + ); + return; + } + + await showAdaptiveBottomSheet( + context: context, + builder: (context) { + return ConstructAnalyticsView( + view: view.constructType, + construct: construct, + ); + }, + ); + } +} diff --git a/lib/pangea/analytics_misc/construct_use_model.dart b/lib/pangea/analytics_misc/construct_use_model.dart index ea98f34e4..90bf7ca0c 100644 --- a/lib/pangea/analytics_misc/construct_use_model.dart +++ b/lib/pangea/analytics_misc/construct_use_model.dart @@ -1,3 +1,5 @@ +import 'dart:math'; + import 'package:fluffychat/pangea/analytics_misc/analytics_constants.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; @@ -21,9 +23,12 @@ class ConstructUses { // Total points for all uses of this lemma int get points { - return uses.fold( - 0, - (total, use) => total + use.xp, + return min( + uses.fold( + 0, + (total, use) => total + use.xp, + ), + AnalyticsConstants.xpForFlower, ); } diff --git a/lib/pangea/analytics_misc/learning_skills_enum.dart b/lib/pangea/analytics_misc/learning_skills_enum.dart index ebe493b09..60fad7847 100644 --- a/lib/pangea/analytics_misc/learning_skills_enum.dart +++ b/lib/pangea/analytics_misc/learning_skills_enum.dart @@ -33,19 +33,4 @@ enum LearningSkillsEnum { return ""; } } - - String? description(BuildContext context) { - switch (this) { - case LearningSkillsEnum.reading: - return L10n.of(context).readingAnalyticsDesc; - case LearningSkillsEnum.hearing: - return L10n.of(context).audioAnalyticsDesc; - case LearningSkillsEnum.speaking: - return L10n.of(context).speakingAnalyticsDesc; - case LearningSkillsEnum.writing: - return L10n.of(context).writingAnalyticsDesc; - default: - return null; - } - } } diff --git a/lib/pangea/analytics_misc/lemma_emoji_setter_mixin.dart b/lib/pangea/analytics_misc/lemma_emoji_setter_mixin.dart index c298f04df..e97dca95b 100644 --- a/lib/pangea/analytics_misc/lemma_emoji_setter_mixin.dart +++ b/lib/pangea/analytics_misc/lemma_emoji_setter_mixin.dart @@ -1,11 +1,9 @@ -import 'dart:convert'; - import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_details_popup/vocab_analytics_list_tile.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_navigation_util.dart'; +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/constructs/construct_identifier.dart'; @@ -49,8 +47,10 @@ mixin LemmaEmojiSetter { textColor: Theme.of(context).colorScheme.surface, onTap: () { ScaffoldMessenger.of(context).hideCurrentSnackBar(); - context.go( - "/rooms/analytics/${constructId.type.name}/${Uri.encodeComponent(jsonEncode(constructId.toJson()))}", + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: constructId.type.indicator, + construct: constructId, ); }, ), diff --git a/lib/pangea/analytics_misc/message_analytics_feedback.dart b/lib/pangea/analytics_misc/message_analytics_feedback.dart index e46ca16fe..50e9cc17f 100644 --- a/lib/pangea/analytics_misc/message_analytics_feedback.dart +++ b/lib/pangea/analytics_misc/message_analytics_feedback.dart @@ -1,9 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_navigation_util.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; class MessageAnalyticsFeedback extends StatefulWidget { @@ -127,7 +126,8 @@ class MessageAnalyticsFeedbackState extends State return Material( type: MaterialType.transparency, child: InkWell( - onTap: () => context.go("/rooms/analytics"), + onTap: () => + AnalyticsNavigationUtil.navigateToAnalytics(context: context), child: ScaleTransition( scale: _bubbleScaleAnimation, alignment: Alignment.bottomRight, @@ -195,7 +195,10 @@ class _NewConstructsBadge extends StatelessWidget { @override Widget build(BuildContext context) { return InkWell( - onTap: () => context.go("/rooms/analytics/${type.string}"), + onTap: () => AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: type.indicator, + ), child: Tooltip( message: tooltip, child: AnimatedBuilder( diff --git a/lib/pangea/analytics_page/activity_archive.dart b/lib/pangea/analytics_page/activity_archive.dart index 0085a43d1..c9ae71625 100644 --- a/lib/pangea/analytics_page/activity_archive.dart +++ b/lib/pangea/analytics_page/activity_archive.dart @@ -6,8 +6,11 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_navigation_util.dart'; import 'package:fluffychat/pangea/analytics_misc/client_analytics_extension.dart'; import 'package:fluffychat/pangea/analytics_misc/saved_analytics_extension.dart'; +import 'package:fluffychat/pangea/analytics_summary/learning_progress_indicators.dart'; +import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; @@ -17,36 +20,52 @@ import '../../config/themes.dart'; import '../../widgets/avatar.dart'; class ActivityArchive extends StatelessWidget { - final String? selectedRoomId; const ActivityArchive({ super.key, - this.selectedRoomId, }); @override Widget build(BuildContext context) { final Room? analyticsRoom = Matrix.of(context).client.analyticsRoomLocal(); final archive = analyticsRoom?.archivedActivities ?? []; - return MaxWidthBody( - withScrolling: false, - child: ListView.builder( - physics: const ClampingScrollPhysics(), - itemCount: archive.length + 1, - itemBuilder: (BuildContext context, int i) { - if (i == 0) { - return InstructionsInlineTooltip( - instructionsEnum: archive.isEmpty - ? InstructionsEnum.noSavedActivitiesYet - : InstructionsEnum.activityAnalyticsList, - padding: const EdgeInsets.all(8.0), - ); - } - i--; - return AnalyticsActivityItem( - room: archive[i], - selected: archive[i].id == selectedRoomId, - ); - }, + final selectedRoomId = GoRouterState.of(context).pathParameters['roomid']; + return Scaffold( + body: SafeArea( + child: Padding( + padding: const EdgeInsetsGeometry.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const LearningProgressIndicators( + selected: ProgressIndicatorEnum.activities, + ), + Expanded( + child: MaxWidthBody( + withScrolling: false, + child: ListView.builder( + physics: const ClampingScrollPhysics(), + itemCount: archive.length + 1, + itemBuilder: (BuildContext context, int i) { + if (i == 0) { + return InstructionsInlineTooltip( + instructionsEnum: archive.isEmpty + ? InstructionsEnum.noSavedActivitiesYet + : InstructionsEnum.activityAnalyticsList, + padding: const EdgeInsets.all(8.0), + ); + } + i--; + return AnalyticsActivityItem( + room: archive[i], + selected: archive[i].id == selectedRoomId, + ); + }, + ), + ), + ), + ], + ), + ), ), ); } @@ -113,9 +132,13 @@ class AnalyticsActivityItem extends StatelessWidget { ), ) : null, - onTap: () => context.go( - '/rooms/analytics/activities/${room.id}', - ), + onTap: () { + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.activities, + activityRoomId: room.id, + ); + }, ), ), ); diff --git a/lib/pangea/analytics_page/analytics_page.dart b/lib/pangea/analytics_page/analytics_page.dart deleted file mode 100644 index f4dc62632..000000000 --- a/lib/pangea/analytics_page/analytics_page.dart +++ /dev/null @@ -1,141 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:go_router/go_router.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -import 'package:fluffychat/pangea/analytics_page/activity_archive.dart'; -import 'package:fluffychat/pangea/analytics_page/analytics_page_constants.dart'; -import 'package:fluffychat/pangea/analytics_summary/learning_progress_indicators.dart'; -import 'package:fluffychat/pangea/analytics_summary/level_analytics_details_content.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class AnalyticsPage extends StatefulWidget { - final ProgressIndicatorEnum? indicator; - final ConstructIdentifier? construct; - final bool isSidebar; - - const AnalyticsPage({ - super.key, - this.indicator, - this.construct, - this.isSidebar = false, - }); - - @override - AnalyticsPageState createState() => AnalyticsPageState(); -} - -class AnalyticsPageState extends State { - @override - void initState() { - super.initState(); - MatrixState.pangeaController.initControllers(); - } - - Future _blockLemma() async { - final resp = await showOkCancelAlertDialog( - context: context, - title: L10n.of(context).areYouSure, - message: L10n.of(context).blockLemmaConfirmation, - isDestructive: true, - ); - - if (resp != OkCancelResult.ok) return; - final res = await showFutureLoadingDialog( - context: context, - future: () => Matrix.of(context) - .analyticsDataService - .updateService - .blockConstruct(widget.construct!), - ); - - if (!res.isError) { - context.go("/rooms/analytics/${ConstructTypeEnum.vocab.name}"); - } - } - - @override - Widget build(BuildContext context) { - final analyticsRoomId = GoRouterState.of(context).pathParameters['roomid']; - return Scaffold( - appBar: widget.construct != null - ? AppBar( - actions: widget.indicator == ProgressIndicatorEnum.wordsUsed - ? [ - IconButton( - icon: const Icon(Icons.delete_forever_outlined), - color: Theme.of(context).colorScheme.error, - tooltip: L10n.of(context).delete, - onPressed: _blockLemma, - ), - ] - : null, - ) - : null, - body: SafeArea( - child: Padding( - padding: const EdgeInsetsGeometry.all(16.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (widget.isSidebar || - (!FluffyThemes.isColumnMode(context) && - widget.construct == null)) - LearningProgressIndicators( - selected: widget.indicator, - canSelect: widget.indicator != ProgressIndicatorEnum.level, - ), - Expanded( - child: () { - if (widget.indicator == ProgressIndicatorEnum.level) { - return const LevelAnalyticsDetailsContent(); - } else if (widget.indicator == - ProgressIndicatorEnum.morphsUsed) { - return ConstructAnalyticsView( - construct: widget.construct, - view: ConstructTypeEnum.morph, - ); - } else if (widget.indicator == - ProgressIndicatorEnum.wordsUsed) { - return ConstructAnalyticsView( - construct: widget.construct, - view: ConstructTypeEnum.vocab, - ); - } else if (widget.indicator == - ProgressIndicatorEnum.activities) { - return ActivityArchive( - selectedRoomId: analyticsRoomId, - ); - } - - return Center( - child: SizedBox( - width: 250.0, - child: CachedNetworkImage( - imageUrl: - "${AppConfig.assetsBaseURL}/${AnalyticsPageConstants.dinoBotFileName}", - errorWidget: (context, url, error) => const SizedBox(), - placeholder: (context, url) => const Center( - child: CircularProgressIndicator.adaptive(), - ), - ), - ), - ); - }(), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/pangea/analytics_page/empty_analytics_page.dart b/lib/pangea/analytics_page/empty_analytics_page.dart new file mode 100644 index 000000000..852dfa679 --- /dev/null +++ b/lib/pangea/analytics_page/empty_analytics_page.dart @@ -0,0 +1,31 @@ +import 'package:flutter/material.dart'; + +import 'package:cached_network_image/cached_network_image.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/analytics_page/analytics_page_constants.dart'; + +class EmptyAnalyticsPage extends StatelessWidget { + const EmptyAnalyticsPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: SafeArea( + child: Center( + child: SizedBox( + width: 250.0, + child: CachedNetworkImage( + imageUrl: + "${AppConfig.assetsBaseURL}/${AnalyticsPageConstants.dinoBotFileName}", + errorWidget: (context, url, error) => const SizedBox(), + placeholder: (context, url) => const Center( + child: CircularProgressIndicator.adaptive(), + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/pangea/analytics_summary/learning_progress_indicators.dart b/lib/pangea/analytics_summary/learning_progress_indicators.dart index 336bacaa0..c15a11b05 100644 --- a/lib/pangea/analytics_summary/learning_progress_indicators.dart +++ b/lib/pangea/analytics_summary/learning_progress_indicators.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_navigation_util.dart'; import 'package:fluffychat/pangea/analytics_misc/client_analytics_extension.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/saved_analytics_extension.dart'; @@ -70,8 +69,10 @@ class LearningProgressIndicators extends StatelessWidget { (c) => HoverButton( selected: selected == c.indicator, onPressed: () { - context.go( - "/rooms/analytics/${c.string}", + AnalyticsNavigationUtil + .navigateToAnalytics( + context: context, + view: c.indicator, ); }, child: ProgressIndicatorBadge( @@ -85,8 +86,9 @@ class LearningProgressIndicators extends StatelessWidget { selected: selected == ProgressIndicatorEnum.activities, onPressed: () { - context.go( - "/rooms/analytics/activities", + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.activities, ); }, child: Tooltip( @@ -181,7 +183,11 @@ class LearningProgressIndicators extends StatelessWidget { child: GestureDetector( onTap: canSelect ? () { - context.go("/rooms/analytics/level"); + AnalyticsNavigationUtil + .navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.level, + ); } : null, child: FutureBuilder( diff --git a/lib/pangea/analytics_summary/level_analytics_details_content.dart b/lib/pangea/analytics_summary/level_analytics_details_content.dart index e42917644..61c316ff9 100644 --- a/lib/pangea/analytics_summary/level_analytics_details_content.dart +++ b/lib/pangea/analytics_summary/level_analytics_details_content.dart @@ -5,6 +5,8 @@ import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; 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_summary/learning_progress_indicators.dart'; +import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; @@ -20,127 +22,137 @@ class LevelAnalyticsDetailsContent extends StatelessWidget { final isColumnMode = FluffyThemes.isColumnMode(context); final analyticsService = Matrix.of(context).analyticsDataService; - return StreamBuilder( - stream: analyticsService.updateDispatcher.constructUpdateStream.stream, - builder: (context, _) { - return Scaffold( - appBar: AppBar( - titleSpacing: 0, - automaticallyImplyLeading: false, - title: FutureBuilder( - future: analyticsService.derivedData, - builder: (context, snapshot) { - final totalXP = snapshot.data?.totalXP ?? 0; - final maxLevelXP = snapshot.data?.minXPForNextLevel ?? 0; - final level = snapshot.data?.level ?? 0; - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 20), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - "⭐ ${L10n.of(context).levelShort(level)}", - style: TextStyle( - fontSize: isColumnMode ? 24 : 16, - fontWeight: FontWeight.w900, - color: AppConfig.gold, - ), - ), - Text( - L10n.of(context).xpIntoLevel(totalXP, maxLevelXP), - style: TextStyle( - fontSize: isColumnMode ? 24 : 16, - fontWeight: FontWeight.w900, - color: AppConfig.gold, - ), - ), - ], - ), - ); - }, - ), - ), - body: FutureBuilder( - future: analyticsService.getUses(count: 100), - builder: (context, snapshot) { - if (!snapshot.hasData) { - return const Center( - child: CircularProgressIndicator.adaptive(), - ); - } - - final uses = snapshot.data!; + return Scaffold( + body: SafeArea( + child: Padding( + padding: const EdgeInsetsGeometry.all(16.0), + child: StreamBuilder( + stream: + analyticsService.updateDispatcher.constructUpdateStream.stream, + builder: (context, _) { return Column( children: [ - Expanded( - child: ListView.builder( - itemCount: uses.length + 1, - itemBuilder: (context, index) { - if (index == 0) { - return const InstructionsInlineTooltip( - instructionsEnum: InstructionsEnum.levelAnalytics, - padding: EdgeInsets.symmetric(vertical: 16.0), - ); - } - index--; + const LearningProgressIndicators( + selected: ProgressIndicatorEnum.level, + canSelect: false, + ), + FutureBuilder( + future: analyticsService.derivedData, + builder: (context, snapshot) { + if (snapshot.data == null) { + return const SizedBox(); + } - final use = uses[index]; - String lemmaCopy = use.lemma; - if (use.constructType == ConstructTypeEnum.morph) { - lemmaCopy = getGrammarCopy( - category: use.category, - lemma: use.lemma, - context: context, - ) ?? - use.lemma; - } - return Padding( - padding: const EdgeInsets.symmetric( - vertical: 12, - horizontal: 16, - ), - child: IntrinsicHeight( - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Align( - alignment: Alignment.centerLeft, - child: Container( - width: 40, - alignment: Alignment.centerLeft, - child: Icon(use.useType.icon), - ), - ), - const SizedBox(width: 10), - Expanded( - child: Text( - "\"$lemmaCopy\" - ${use.useType.description(context)}", - style: const TextStyle(fontSize: 14), - ), - ), - Container( - alignment: Alignment.topRight, - width: 60, - child: Row( - crossAxisAlignment: - CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - "${use.xp > 0 ? '+' : ''}${use.xp}", - style: TextStyle( - fontWeight: FontWeight.w900, - fontSize: 14, - height: 1, - color: use.pointValueColor(context), - ), - ), - ], - ), - ), - ], + final totalXP = snapshot.data!.totalXP; + final maxLevelXP = snapshot.data!.minXPForNextLevel; + final level = snapshot.data!.level; + + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "⭐ ${L10n.of(context).levelShort(level)}", + style: TextStyle( + fontSize: isColumnMode ? 24 : 16, + fontWeight: FontWeight.w900, + color: AppConfig.gold, ), ), + Text( + L10n.of(context).xpIntoLevel(totalXP, maxLevelXP), + style: TextStyle( + fontSize: isColumnMode ? 24 : 16, + fontWeight: FontWeight.w900, + color: AppConfig.gold, + ), + ), + ], + ); + }, + ), + Expanded( + child: FutureBuilder( + future: analyticsService.getUses(count: 100), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return const Center( + child: CircularProgressIndicator.adaptive(), + ); + } + + final uses = snapshot.data!; + return ListView.builder( + itemCount: uses.length + 1, + itemBuilder: (context, index) { + if (index == 0) { + return const InstructionsInlineTooltip( + instructionsEnum: + InstructionsEnum.levelAnalytics, + padding: EdgeInsets.symmetric(vertical: 16.0), + ); + } + index--; + + final use = uses[index]; + String lemmaCopy = use.lemma; + if (use.constructType == ConstructTypeEnum.morph) { + lemmaCopy = getGrammarCopy( + category: use.category, + lemma: use.lemma, + context: context, + ) ?? + use.lemma; + } + return Padding( + padding: const EdgeInsets.symmetric( + vertical: 12, + horizontal: 16, + ), + child: IntrinsicHeight( + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.centerLeft, + child: Container( + width: 40, + alignment: Alignment.centerLeft, + child: Icon(use.useType.icon), + ), + ), + const SizedBox(width: 10), + Expanded( + child: Text( + "\"$lemmaCopy\" - ${use.useType.description(context)}", + style: const TextStyle(fontSize: 14), + ), + ), + Container( + alignment: Alignment.topRight, + width: 60, + child: Row( + crossAxisAlignment: + CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "${use.xp > 0 ? '+' : ''}${use.xp}", + style: TextStyle( + fontWeight: FontWeight.w900, + fontSize: 14, + height: 1, + color: + use.pointValueColor(context), + ), + ), + ], + ), + ), + ], + ), + ), + ); + }, ); }, ), @@ -149,8 +161,8 @@ class LevelAnalyticsDetailsContent extends StatelessWidget { ); }, ), - ); - }, + ), + ), ); } } diff --git a/lib/pangea/analytics_summary/progress_indicators_enum.dart b/lib/pangea/analytics_summary/progress_indicators_enum.dart index 7e3cb30a2..81f4da73d 100644 --- a/lib/pangea/analytics_summary/progress_indicators_enum.dart +++ b/lib/pangea/analytics_summary/progress_indicators_enum.dart @@ -69,4 +69,17 @@ enum ProgressIndicatorEnum { return ConstructTypeEnum.vocab; } } + + String get route { + switch (this) { + case level: + return 'level'; + case wordsUsed: + return ConstructTypeEnum.vocab.name; + case morphsUsed: + return ConstructTypeEnum.morph.name; + case activities: + return 'activities'; + } + } } diff --git a/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart b/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart index f53116f18..a88c25f34 100644 --- a/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart +++ b/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart @@ -1,16 +1,14 @@ // ignore_for_file: depend_on_referenced_packages, implementation_imports import 'dart:async'; -import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_navigation_util.dart'; +import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/chat/widgets/icon_rain.dart'; import 'package:fluffychat/pangea/common/utils/overlay.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; @@ -168,8 +166,10 @@ class ConstructNotificationOverlayState } void _showDetails() { - context.go( - "/rooms/analytics/${ConstructTypeEnum.morph.string}/${Uri.encodeComponent(jsonEncode(widget.construct.toJson()))}", + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.morphsUsed, + construct: widget.construct, ); } diff --git a/lib/widgets/layouts/two_column_layout.dart b/lib/widgets/layouts/two_column_layout.dart index fec117765..6d9f3fc95 100644 --- a/lib/widgets/layouts/two_column_layout.dart +++ b/lib/widgets/layouts/two_column_layout.dart @@ -7,9 +7,10 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/settings/settings.dart'; +import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -import 'package:fluffychat/pangea/analytics_page/analytics_page.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/analytics_page/activity_archive.dart'; +import 'package:fluffychat/pangea/analytics_summary/level_analytics_details_content.dart'; import 'package:fluffychat/pangea/spaces/space_constants.dart'; import 'package:fluffychat/widgets/navigation_rail.dart'; @@ -113,21 +114,14 @@ class _MainView extends StatelessWidget { } if (path.contains("analytics")) { - ProgressIndicatorEnum indicator = ProgressIndicatorEnum.wordsUsed; if (path.contains("analytics/level")) { - indicator = ProgressIndicatorEnum.level; - } else if (path.contains("analytics/${ConstructTypeEnum.morph.string}")) { - indicator = ProgressIndicatorEnum.morphsUsed; - } else if (path.contains("analytics/${ConstructTypeEnum.vocab.string}")) { - indicator = ProgressIndicatorEnum.wordsUsed; + return const LevelAnalyticsDetailsContent(); } else if (path.contains("analytics/activities")) { - indicator = ProgressIndicatorEnum.activities; + return const ActivityArchive(); + } else if (path.contains("analytics/${ConstructTypeEnum.morph.string}")) { + return const ConstructAnalyticsView(view: ConstructTypeEnum.morph); } - - return AnalyticsPage( - indicator: indicator, - isSidebar: true, - ); + return const ConstructAnalyticsView(view: ConstructTypeEnum.vocab); } if (path.contains("settings")) { diff --git a/lib/widgets/navigation_rail.dart b/lib/widgets/navigation_rail.dart index c191f3b9b..650d7dcdf 100644 --- a/lib/widgets/navigation_rail.dart +++ b/lib/widgets/navigation_rail.dart @@ -7,6 +7,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/navi_rail_item.dart'; +import 'package:fluffychat/pangea/analytics_misc/analytics_navigation_util.dart'; import 'package:fluffychat/pangea/chat_list/utils/chat_list_handle_space_tap.dart'; import 'package:fluffychat/pangea/course_plans/map_clipper.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; @@ -92,7 +93,9 @@ class SpacesNavigationRail extends StatelessWidget { return NaviRailItem( isSelected: isAnalytics, onTap: () { - context.go("/rooms/analytics"); + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + ); }, backgroundColor: Colors.transparent, icon: FutureBuilder(