4907 construct details changes (#4961)
* chore: remove delegation analytics page * feat: vocab construct analytics level bar * chore: analytics mobile navigation * feat: cap construct XP
This commit is contained in:
parent
2bb51da97b
commit
0eeec052b2
80 changed files with 700 additions and 1693 deletions
|
|
@ -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,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@ class AnalyticsDataService {
|
|||
|
||||
Future<void> _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<Map<ConstructIdentifier, ConstructUses>> getAggregatedConstructs(
|
||||
ConstructTypeEnum type,
|
||||
) async {
|
||||
await _ensureInitialized();
|
||||
final combined =
|
||||
await _analyticsClientGetter.database.getAggregatedConstructs(type);
|
||||
|
||||
|
|
@ -341,14 +350,10 @@ class AnalyticsDataService {
|
|||
AnalyticsUpdate update,
|
||||
) async {
|
||||
final events = <AnalyticsUpdateEvent>[];
|
||||
|
||||
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!));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,9 +31,7 @@ class AnalyticsDatabase with DatabaseFileStorage {
|
|||
late Box<Map> _aggregatedLocalVocabConstructsBox;
|
||||
late Box<Map> _aggregatedServerMorphConstructsBox;
|
||||
late Box<Map> _aggregatedLocalMorphConstructsBox;
|
||||
|
||||
late Box<Map> _derivedServerStatsBox;
|
||||
late Box<Map> _derivedLocalStatsBox;
|
||||
late Box<Map> _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<Map>(
|
||||
_aggregatedLocalMorphConstructsBoxName,
|
||||
);
|
||||
_derivedServerStatsBox = _collection.openBox<Map>(
|
||||
_derivedServerStatsBoxName,
|
||||
);
|
||||
_derivedLocalStatsBox = _collection.openBox<Map>(
|
||||
_derivedLocalStatsBoxName,
|
||||
_derivedStatsBox = _collection.openBox<Map>(
|
||||
_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<DerivedAnalyticsDataModel> _getDerivedServerStats() async {
|
||||
final raw = await _derivedServerStatsBox.get('derived_stats');
|
||||
return raw == null
|
||||
? DerivedAnalyticsDataModel()
|
||||
: DerivedAnalyticsDataModel.fromJson(
|
||||
Map<String, dynamic>.from(raw),
|
||||
);
|
||||
}
|
||||
|
||||
Future<DerivedAnalyticsDataModel> _getDerivedLocalStats() async {
|
||||
final raw = await _derivedLocalStatsBox.get('derived_stats');
|
||||
return raw == null
|
||||
? DerivedAnalyticsDataModel()
|
||||
: DerivedAnalyticsDataModel.fromJson(
|
||||
Map<String, dynamic>.from(raw),
|
||||
);
|
||||
}
|
||||
|
||||
Future<DerivedAnalyticsDataModel> 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<String, dynamic>.from(raw),
|
||||
);
|
||||
}
|
||||
|
||||
Future<List<OneConstructUse>> 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<void> 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<void> 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();
|
||||
|
|
|
|||
|
|
@ -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<ConstructAnalyticsView> {
|
|||
|
||||
@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!),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -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,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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: [
|
||||
|
|
|
|||
|
|
@ -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<void> _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),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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<VocabAnalyticsListTile> {
|
||||
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<VocabAnalyticsListTile> {
|
|||
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<VocabAnalyticsListTile> {
|
|||
fontSize: 22,
|
||||
),
|
||||
)
|
||||
: widget.level.icon(36.0),
|
||||
: level.icon(36.0),
|
||||
);
|
||||
},
|
||||
),
|
||||
|
|
@ -80,11 +74,11 @@ class VocabAnalyticsListTileState extends State<VocabAnalyticsListTile> {
|
|||
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,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
59
lib/pangea/analytics_misc/analytics_navigation_util.dart
Normal file
59
lib/pangea/analytics_misc/analytics_navigation_util.dart
Normal file
|
|
@ -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<void> 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,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<int>(
|
||||
0,
|
||||
(total, use) => total + use.xp,
|
||||
return min(
|
||||
uses.fold<int>(
|
||||
0,
|
||||
(total, use) => total + use.xp,
|
||||
),
|
||||
AnalyticsConstants.xpForFlower,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
);
|
||||
},
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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<MessageAnalyticsFeedback>
|
|||
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(
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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<AnalyticsPage> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
MatrixState.pangeaController.initControllers();
|
||||
}
|
||||
|
||||
Future<void> _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(),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}(),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
31
lib/pangea/analytics_page/empty_analytics_page.dart
Normal file
31
lib/pangea/analytics_page/empty_analytics_page.dart
Normal file
|
|
@ -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(),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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 {
|
|||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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")) {
|
||||
|
|
|
|||
|
|
@ -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<Profile>(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue